stud-2779裸bfs

来源:互联网 发布:电力代维软件 编辑:程序博客网 时间:2024/06/05 10:17

c++的数组下标为负数竟然不报错

#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <iostream>using namespace std;#define DEBUGconst int maxn=15+5;char buf[maxn][maxn];bool visited[maxn][maxn];int md[4][2]={0,1,0,-1,-1,0,1,0};int m,n;struct node{    int x,y,step;    node(int x,int y,int step):x(x),y(y),step(step){}};void bfs(int x,int y,int t){    queue<node> q;    node u(x,y,0);    memset(visited,0,sizeof(visited));    visited[x][y]=1;    q.push(u);    while(!q.empty()){        node u=q.front();q.pop();        visited[u.x][u.y]=1;        for(int i=0;i<4;i++){            node temp(u.x+md[i][0],u.y+md[i][1],u.step+1);            if(temp.x<0||temp.x>=m||temp.y<0||temp.y>=n)continue;            if(visited[temp.x][temp.y]){continue;}            if(buf[temp.x][temp.y]=='*'){q.push(temp);visited[temp.x][temp.y]=1;}            else if(buf[temp.x][temp.y]=='Y'){printf("%d\n",temp.step);return;}            else{                cout<<temp.x<<"\t"<<temp.y<<"\t"<<temp.step<<endl;            }        }        u=q.front();    }    printf("%d\n",-1);    // for(int i=0;i<4;i++){    //  bfs(x+md[i][0],y+md[i][1],t);    // }}void solve(){    int sx,sy,ex,ey;    for(int i=0;i<m;i++)        for(int j=0;j<n;j++)            if(buf[i][j]=='X')                sx=i,sy=j;            else if(buf[i][j]=='Y')                ex=i,ey=j;    bfs(sx,sy,0);}int main(){#ifdef DEBUG    freopen("in.txt", "r", stdin);    freopen("out.txt", "w", stdout);#endif    while(scanf("%d%d",&m,&n)==2&&m&&n){        for(int i=0;i<m;i++)scanf("%s",buf[i]);        solve();    }#ifdef DEBUG    fclose(stdin);    fclose(stdout);#endif    return 0;}
原创粉丝点击