hdu 1010

来源:互联网 发布:网络理财收益排行榜 编辑:程序博客网 时间:2024/06/14 18:29

题目大意:在迷宫中,S是起点,D是终点,。可走,X不可走,到达D的时间正好等于时间t时能走出迷宫,输出yes or no。

#include <stdio.h>#include <string.h>#include <math.h>int n,m,t;int xx,yy;int flag;char f[7][7];int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//4个方向void DFS(int x,int y,int num){int i,dis;int nextx,nexty;if(num==t&&x==xx&&y==yy){flag=1;return ;}if(flag==1)return ;dis=abs(x-xx)+abs(y-yy);if(dis>t||(t-num-dis)%2!=0)return ;//距离和时间之差不是2的倍数的话,到不了,防止超时for(i=0;i<4;i++){nextx=x+dir[i][0];nexty=y+dir[i][1];if(nextx>=0&&nextx<n&&nexty>=0&&nexty<m&&f[nextx][nexty]!='X'&&f[nextx][nexty]!='S')//S,X不可走{f[nextx][nexty]='X';DFS(nextx,nexty,num+1);f[nextx][nexty]='.';}}}int main(){int i,j,x,y,num;while(scanf("%d %d %d",&n,&m,&t)!=EOF&&(n||m||t)){flag=num=0;getchar();memset(f,0,sizeof(f));for(i=0;i<n;i++){for(j=0;j<m;j++){scanf("%c",&f[i][j]);if(f[i][j]=='S')x=i,y=j;if(f[i][j]=='D')xx=i,yy=j;}getchar();//坑爹的回车,打一行输入一个回车}DFS(x,y,num);if(flag==1)printf("YES\n");elseprintf("NO\n");}return 0;}


0 0
原创粉丝点击