首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

HDU 1728 逃出迷宫

2012-10-27 
HDU 1728 逃离迷宫 .逃离迷宫Time Limit: 1000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (J

HDU 1728 逃离迷宫 .

逃离迷宫

Time Limit: 1000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3619????Accepted Submission(s): 860

#include<queue>#include<iostream>using namespace std;struct node { int x,y,dx,dy; } in,temp;char map[102][102];int turn[102][102];int move[4][2]={0,1,1,0,0,-1,-1,0};int i,j,m,n,k,sx,sy,ex,ey,x,y,T_turn;bool flag;//queue<node>q; //就系呢个杯具WA n次bool BFS(){ queue<node> q; //改左就AC in.x=sx-1; in.y=sy-1; in.dx=-2; in.dy=-2; turn[in.x][in.x]=-1; //因为系一直走到底,所以出列后就一定转弯。 q.push(in); while (!q.empty()) { in=q.front(); q.pop(); T_turn=turn[in.x][in.y]+1; if (turn[in.x][in.y]>k) return 0; for (i=0;i<4;i++) { x=in.x+move[i][0]; y=in.y+move[i][1]; while (x>-1 && y>-1 && x<m && y<n && map[x][y]=='.') { if (turn[x][y]==-1){ //-1姐系未访问过ge点 if (x==ex-1 && y==ey-1 && T_turn<=k) return 1; //呢个都系帮凶。 temp.x=x; temp.y=y; turn[x][y]=T_turn; //改变turn[x][y]值同标记有同样效果,防止同一点多次入列。 q.push(temp); } x+=move[i][0]; y+=move[i][1]; } } } return 0;}int main(){ int t; scanf("%d",&t); while (t--) { scanf("%d%d",&m,&n); for (i=0;i<m;i++) scanf("%s",map[i]); for (i=0;i<m;i++) for (j=0;j<n;j++) turn[i][j]=-1; //初始化turn数组-1为未访问 scanf("%d%d%d%d%d",&k,&sy,&sx,&ey,&ex); if (sx==ex && sy==ey) puts("yes"); //考虑起点等于终点 else puts(BFS()?"yes":"no"); } return 0;}

?

?

AC之后我就捻我先前果个算法系唔系都系呢个错呢?………………实践中………………

热点排行