Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我挫爆了,,忘了赋初值了,,wa了4次。。。(附代码)#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <vector> using namespace std; int map[30][30],cnt[300],col[300],sx,sy,m,n;//cnt是地图中要是出现的次数,col是搜索到的要是次数,只要bfs中没有新的节点加入就说明NO bool vis[30][30]; int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; struct NOTE { int x,y; }; void read() { memset(map,0,sizeof map); memset(cnt,0,sizeof cnt); memset(col,-1,sizeof col); memset(vis,0,sizeof vis); char ls[25]; for(int i=1;i<=m;i++) { scanf("%s",ls); for(int j=0;j<n;j++) { map[i][j+1]=ls[j]; if(map[i][j+1]>='a'&&map[i][j+1]<='e') { col[ls[j]]=0; cnt[ls[j]]++; } if(map[i][j+1]=='S') {sx=i;sy=j+1;} } } } void cal() { int flag=1;//就是这里忘了赋值了。。。 vector<NOTE> q; NOTE tmp; tmp.x=sx;tmp.y=sy; q.push_back(tmp); vis[sx][sy]=1; while(flag) { flag=0; for(int k=0;k<q.size();k++) { NOTE sta=q[k]; for(int i=0;i<4;i++) { int tx=sta.x+d[i][0]; int ty=sta.y+d[i][1]; if(tx<=0||ty<=0||tx>m||ty>n) continue; if(map[tx][ty]=='G') { printf("YES\n"); return; } if(map[tx][ty]=='.'&&!vis[tx][ty]) { NOTE tp; tp.x=tx;tp.y=ty; q.push_back(tp); flag=1; vis[tx][ty]=1; continue; } if(map[tx][ty]=='X') continue; if(map[tx][ty]>='a'&&map[tx][ty]<='e'&&!vis[tx][ty]) { col[map[tx][ty]]++; vis[tx][ty]=1; map[tx][ty]='.'; NOTE tp; tp.x=tx;tp.y=ty; q.push_back(tp); flag=1; continue; } if(map[tx][ty]>='A'&&map[tx][ty]<='E'&&!vis[tx][ty]) { if(col[map[tx][ty]+32]<cnt[map[tx][ty]+32]) continue; map[tx][ty]='.'; vis[tx][ty]=1; NOTE tp; tp.x=tx;tp.y=ty; q.push_back(tp); flag=1; continue; } } } } printf("NO\n"); } int main() { while(scanf("%d%d",&m,&n)&&n&&m) { read(); cal(); } system("pause"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator