题目链接:
题目大意:问迷宫中有多少个点被访问。
解题思路:
DFS肯定能水过去的。这里就拍了一下BFS。
然后发现自己BFS访问标记有问题,导致某些点被重复访问了。
赶紧改了一下。
#include "cstdio"#include "queue"#include "string"#include "cstring"#include "iostream"using namespace std;int n,m,sx,sy,map[25][25],dir[4][2]={-1,0,1,0,0,-1,0,1},cnt;bool vis[25][25];struct status{ int x,y; status(int x,int y):x(x),y(y) {}};void bfs(int x,int y){ queueQ; Q.push(status(sx,sy)); vis[sx][sy]=true; while(!Q.empty()) { cnt++; status t=Q.front();Q.pop(); for(int s=0;s<4;s++) { int X=t.x+dir[s][0],Y=t.y+dir[s][1]; if(vis[X][Y]||X<0||X>n||Y<0||Y>m||!map[X][Y]) continue; vis[X][Y]=true; Q.push(status(X,Y)); } }}int main(){ //freopen("in.txt","r",stdin); ios::sync_with_stdio(false); string tt; while(cin>>m>>n&&n) { cnt=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { cin>>tt; for(int j=0;j
1869483 | 2014-10-14 14:49:59 | Accepted | 15MS | 292K | C++ |