1. 程式人生 > >noj電子老鼠走迷宮(深搜dfs)超時錯誤

noj電子老鼠走迷宮(深搜dfs)超時錯誤

1042.電子老鼠闖迷宮

時限:1000ms 記憶體限制:10000K  總時限:3000ms

描述 有一隻電子老鼠被困在如下圖所示的迷宮中。這是一個12*12單元的正方形迷宮,黑色部分表示建築物,白色部分是路。電子老鼠可以在路上向上、下、左、右行走,每一步走一個格子。現給定一個起點S和一個終點T,求出電子老鼠最少要幾步從起點走到終點。
  輸入 本題包含一個測例。在測例的第一行有四個由空格分隔的整數,分別表示起點的座標S(x.y)和終點的座標T(x,y)。從第二行開始的12行中,每行有12個字元,描述迷宮的情況,其中'X'表示建築物,'.'表示路.   輸出 輸出一個整數,即電子老鼠走出迷宮至少需要的步數。   輸入樣例 2 9 11 8
XXXXXXXXXXXX
X......X.XXX
X.X.XX.....X
X.X.XX.XXX.X
X.X.....X..X
X.XXXXXXXXXX
X...X.X....X
X.XXX...XXXX
X.....X....X
XXX.XXXX.X.X
XXXXXXX..XXX
XXXXXXXXXXXX   輸出樣例 28
#include <stdio.h>
#include 
<string.h> int n=12,m=12,p,q,min = 99999999; int book[13][13]; char a[13][13]; void dfs(int x,int y,int step) { int next[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; int tx,ty,k; if (x==p&&y==q)//判斷是否到達位置 { if(step<min) min = step; return; }
for (k = 0;k <= 3;k++)//列舉四種走法 { tx = x + next[k][0]; ty = y + next[k][1]; if (tx<1||tx>n||ty<1||ty>m)//判斷是否越界 { continue; } if (a[tx][ty]=='.'&&book[tx][ty]==0)//判斷是否為障礙物和是否在路徑中 { book[tx][ty] = 1; dfs(tx,ty,step
+1); book[tx][ty]=0; } } return; } int main() { int i,startx,starty; scanf("%d %d %d %d",&startx,&starty,&p,&q); getchar(); for(i=1;i<=n;i++) gets(a[i]); book[startx][starty] = 1; dfs(startx,starty,0); printf("%d\n",min); return 0; }