首页 > 其他分享 >营救

营救

时间:2022-08-25 21:11:57浏览次数:46  
标签:int yy xx ans now 营救 1001

营救

  • 分析:根据题意,BFS具有求最短路径的特点,就是套用BFS的模板,在if语句判断时不越界,没被标记,是海洋(船只能走海洋),还有就是每走一步步数增加1,从营救船所在的位置开始,到遇难船所在的位置结束。
  • #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    int n,x1,y1,x2,y2;
    char a[1001][1001];
    bool b[1001][1001];//标记数组
    int ans[1001][1001];//ans记录步数
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};
    struct node
    {
    int x,y;
    }now;
    void bfs(int x,int y)
    {
    ans[x][y]=0;//步数一开始是0
    queue<node> q;
    q.push({x,y});
    while(!q.empty())
    {
    now=q.front();
    q.pop();
    for(int i=0;i<4;i++)
    {
    int xx=now.x+dx[i];
    int yy=now.y+dy[i];
    if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&b[xx][yy]==0&&a[xx][yy]=='0')
    {//没超范围 没被标记 是海洋
    b[xx][yy]=1;//标记
    ans[xx][yy]=ans[now.x][now.y]+1;//步数加1
    q.push({xx,yy});
    }
    }
    }
    }
    int main()
    {
    cin>>n;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    cin>>a[i][j];
    cin>>x1>>y1>>x2>>y2;
    bfs(x1,y1);
    cout<<ans[x2][y2];
    return 0;
    }

标签:int,yy,xx,ans,now,营救,1001
From: https://www.cnblogs.com/xdzxjinghan/p/16625710.html

相关文章

  • 营救
    广搜,挨个遍历,记录起点和终点,下一个的起点等于终点+1#include<bits/stdc++.h>usingnamespacestd;intxx[4]={0,0,1,-1},yy[4]={1,-1,0,0};intkt,s=0,kts,ktts;charc;in......
  • 5.营救
    码学堂同第一题,最短路径的板子题这种题的一般思路:广搜:1.初始状态标记(初始元素入队,初始元素vis,ans,cnt等数据初始化)2.进入while(!q.empty())(1)取出队首元素放入now(不要忘记......
  • 营救
    先把起点入队。从队首向上下左右拓展节点,如果拓展出的某个节点在边界内未曾访问且是海洋则将这个节点入队,将其标记为已访问,用队首节点更新新节点到起点路程,拓展完后将队首......