@xunuo
2017-01-18T13:11:23.000000Z
字数 1205
阅读 1323
BFS
int BFS(){node now,next;queue<node>q;//队列now.x=x;now.y=y;now.step=0;q.push(now);//初始点入队while(!q.empty()){now=q.front();q.pop();if(a[now.x][now.y]=='C'){count=now.step;return count;}for(i=0;i<4;i++)//p的所有邻接点{next=now;next.x+=dir[i][0];next.y+=dir[i][1];if(next.x>=0&&next.x<r&&next.y>=0&&next.y<c&&a[next.x][next.y]!='*'&&vis[next.x][next.y]==0){vis[next.x][next.y]=1;next.step=now.step+1;q.push(next);}}}return -1;}
#include<stdio.h>#include<queue>using namespace std;int dir[4][2]={1,0,-1,0,0,1,0,-1};//方向数组int vis[111][111];//标记数组char a[111][111];//存路径的数组int r,c,x,y,count,i;struct node{int x;int y;int step;};int BFS(){node now,next;queue<node>q;//队列now.x=x;now.y=y;now.step=0;q.push(now);//初始点入队while(!q.empty()){now=q.front();q.pop();if(a[now.x][now.y]=='C'){count=now.step;return count;}for(i=0;i<4;i++)//p的所有邻接点{next=now;next.x+=dir[i][0];next.y+=dir[i][1];if(next.x>=0&&next.x<r&&next.y>=0&&next.y<c&&a[next.x][next.y]!='*'&&vis[next.x][next.y]==0){vis[next.x][next.y]=1;next.step=now.step+1;q.push(next);}}}return -1;}int main(){int i,j,ct;scanf("%d%d",&r,&c);for(i=0;i<r;i++)scanf("%s",&a[i]);for(i=0;i<r;i++)for(j=0;j<c;j++)if(a[i][j]=='B'){x=i;y=j;}ct=BFS();printf("%d\n",ct);return 0;}
