【CodeCraft比赛】Problem 3——INVESCAPE (迷宫BFS)
CodeCraft是印度IIT大学举办的一个算法邀请赛(这个大学貌似在印度挺出名,有个笑话:印度某集团的老总谈自己的儿子说,我这个不争气的儿子,考IIT都没考上,我气得没办法,只好把他送到了哈佛。。。囧rz)目前只有这一届。
在人人上看到了ACM-ICPC主页君过年期间比赛的新闻,于是很有兴趣便参加了一下,据官网说还会再搞。第一名200美刀,第二名75美刀。我又折腾了一晚上,3AC拿了第30名,小红花一朵
比赛题目链接(注册后才能查看):http://felicity.iiit.ac.in/web2py/Portal/default/event_home?event_id=5&tab_id=102
题目:
22.D..2.DD.
YESNO
热身题,挺水的一个BFS,从坐标(1,1)——> (n,n),最终能不能走到,手打1AC。
#include <iostream>#include <queue>#include <cstring>using namespace std;const int INF=105;int mapsize=0;int finder=0;char maze[105][105];int visited[105][105];int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};class point{public:int x;int y;};void Initmaze(int x){memset(visited,0,sizeof(visited));for(int i=1;i<=x;i++){for(int j=1;j<=x;j++){cin>>maze[i][j];}}}void bfs(){point start,end;queue<point> Q;start.x=1;start.y=1;visited[1][1]=1;Q.push(start);while(!Q.empty()){end=Q.front();Q.pop();for(int i=0;i<4;i++){start.x=end.x+dir[i][0];start.y=end.y+dir[i][1];while(start.x>=1 && start.x<=mapsize && start.y>=1 && start.y<=mapsize && maze[start.x][start.y]=='.'){if(visited[start.x][start.y]==0){if(start.x==mapsize && start.y==mapsize){finder=1;return;}visited[start.x][start.y]=1;Q.push(start);}start.x+=dir[i][0];start.y+=dir[i][1];}}}}int main(){int testcase;cin>>testcase;while(testcase--){cin>>mapsize;Initmaze(mapsize);finder=0;if(mapsize==1){cout<<"YES"<<endl;continue;}else{bfs();if(finder==1)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}}return 0;}