BFS

//给一个地图由起点到点最短步数 .通*不通
//标准广搜模版题
#include
using namespace std;
char mp[103][103];          //地图大小
int vis[103][103];          //访问标记
typedef struct point pt;    //点重命名
struct point{int x;int y;}; //点结构体
typedef pair p;     //pair存点与距离,方便队列
int dx[4]={0,0,-1,1};       //X偏移,上下左右
int dy[4]={1,-1,0,0};       //Y偏移,上下左右
int main(){
    int n,m;cin>>n>>m;      //地图大小
    pt s,g;                 //定义起点与终点
    for(int i=1;i<=n;i++){  //遍历行
        for(int j=1;j<=m;j++){  //遍历列
            cin>>mp[i][j];      //输入
            if(mp[i][j]=='s'){  //如果是起点
                s.x=i;      //记下X
                s.y=j;      //记下Y
            }
            if(mp[i][j]=='g'){//如果是终点
                g.x=i;      //记下X
                g.y=j;      //记下Y
            }

        }
    }
    queue

qu; //开队列 qu.push(p(s,0)); //压入起点 while(!qu.empty()){ //非空 pt nowp=qu.front().first; //读出队首点 int dis=qu.front().second; //读出队首点到起点步数 vis[nowp.x][nowp.y]=1; //打上已访问标记 qu.pop(); //弹出队首 if(nowp.x==g.x&&nowp.y==g.y){cout<n)continue; //得新X,超限跳过 newp.y=nowp.y+dy[i];if(newp.y<1 || newp.y>m)continue; //得新Y,超限跳过 if(vis[newp.x][newp.y]==0&&mp[newp.x][newp.y]!='*'){ //未访问且可行 qu.push(p(newp,dis+1)); //新点压入队列 } } } cout<<"impossible"<

你可能感兴趣的:(ACM笔记-3图流)