搜索1016
题目大意:
给出矩阵,从@出发,只能走.,问最多能走几步
解题思路:
bfs
代码:
#include<iostream> #include<string.h> #include<queue> #include<stdio.h> using namespace std; char mapp[205][205]; int vis[205][205]; int n,sx,sy,m; int dirx[5]={0,0,1,-1}; int diry[5]={1,-1,0,0}; struct point { int x; int y; }; int isend(int x,int y) { if(x<0||y<0||x>=n||y>=m||vis[x][y]||mapp[x][y]=='#') return 1; return 0; } int bfs() { queue<point>que; point now,next; now.x=sx; now.y=sy; que.push(now); int i; while(!que.empty()) { now=que.front(); que.pop(); vis[now.x][now.y]=1; for(i=0;i<4;i++) { next.x=now.x+dirx[i]; next.y=now.y+diry[i]; if(isend(next.x,next.y)) continue; else { que.push(next); } } } return 0; } int main() { int i,j; while(~scanf("%d%d",&m,&n)) { if(n==0&&m==0) break; for(i=0;i<n;i++) { scanf("%s",mapp[i]); for(j=0;j<m;j++) if(mapp[i][j]=='@') { sx=i;sy=j; } } memset(vis,0,sizeof(vis)); bfs(); int num=0; for(i=0;i<n;i++) for(j=0;j<m;j++) { if(vis[i][j]) num++; } cout<<num<<endl; } return 0; }