POJ - 1101 The Game DFS

来源:互联网 发布:手机淘宝如何注销账户 编辑:程序博客网 时间:2024/03/29 21:39

题目链接


#include<stdio.h>#include<iostream>#include<string>#include<string.h>#include<math.h>#include<algorithm>#include<vector>#include<queue>using namespace std;const int maxn = 505;const int inf = 1<<30;int n,m,ans;int xs[] = {0,-1,0,1};   //右上左下int ys[] = {1,0,-1,0};int sx,sy,ex,ey;char map[maxn][maxn];void DFS( int x,int y,int dir,int turn ){if( turn >= ans )return;if( x == ex && y == ey ){ans = turn;return;}for( int i = 0; i < 4; i ++ ){int xx = x + xs[i];int yy = y + ys[i];if( xx >= 0 && xx <= n+1 && yy >= 0 && yy <= m+1 ){if( xx == ex && yy == ey ){if( i == dir )DFS(xx,yy,dir,turn);elseDFS(xx,yy,i,turn+1);}else if( map[xx][yy] != 'X' ){map[xx][yy] = 'X';if( i == dir )DFS(xx,yy,dir,turn);elseDFS(xx,yy,i,turn+1);map[xx][yy] = ' ';}}}}int main(){    //freopen("data.txt","r",stdin);   char ch;int cas = 1;while( scanf("%d%d",&n,&m) == 2,(n||m) ){memset(map,' ',sizeof(map));for( int i = 1; i <= m; i ++ ){getchar();for( int j = 1; j <= n; j ++ ){scanf("%c",&map[j][i]);}}int pair = 1;if( cas != 1 )puts("");printf("Board #%d:\n",cas++);while( scanf("%d%d%d%d",&sx,&sy,&ex,&ey) == 4,(sx||sy||ex||ey) ){ans = inf;DFS(sx,sy,-1,0);if( ans != inf )printf("Pair %d: %d segments.\n",pair++,ans);elseprintf("Pair %d: impossible.\n",pair++);}}    return 0;}


0 0
原创粉丝点击