hncu 1102:迷宮問題(BFS)
1909 ワード
http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1102
テーマの説明
明さんは迷路にいます.出発点から終点までの最短距離を探してください.明さんは上下左右の四つの方向にしか動かないです.
入力フォーマット
複数のグループのテストデータを入力します.入力の最初の行は整数Tで、Tグループのテストデータがあることを表しています.各グループの入力の最初の行は2つの整数NとM(1<=N,M<=100)である.次のN行には、各行にM文字が入力され、各文字は迷路の中の小さい四角形を表します.文字の意味は以下の通りです.「S」:起点「E」:終点「-」:空き地は、「胪」を通じてできます.障害は、データを入力することによって保証できず、スタートとゴールしかないです.
出力
各グループの入力に対して、起点から終点までの最短距離を出力します.起点から終点までの道がなければ、-1を出力します.
サンプル入力
1 5 5 S-葃\33754;-----\33751;菗---E\33781;-----\菵
サンプル出力
9
簡単なBFS
テーマの説明
明さんは迷路にいます.出発点から終点までの最短距離を探してください.明さんは上下左右の四つの方向にしか動かないです.
入力フォーマット
複数のグループのテストデータを入力します.入力の最初の行は整数Tで、Tグループのテストデータがあることを表しています.各グループの入力の最初の行は2つの整数NとM(1<=N,M<=100)である.次のN行には、各行にM文字が入力され、各文字は迷路の中の小さい四角形を表します.文字の意味は以下の通りです.「S」:起点「E」:終点「-」:空き地は、「胪」を通じてできます.障害は、データを入力することによって保証できず、スタートとゴールしかないです.
出力
各グループの入力に対して、起点から終点までの最短距離を出力します.起点から終点までの道がなければ、-1を出力します.
サンプル入力
1 5 5 S-葃\33754;-----\33751;菗---E\33781;-----\菵
サンプル出力
9
簡単なBFS
#include
#include
#include
using namespace std;
struct node
{
int x,y,step;
};
char map[105][105];
int vis[105][105];
int to[4][2]= {1,0,-1,0,0,1,0,-1};
int n,m,sx,sy,ex,ey,ans;
int check(int x,int y)
{
if(x<0 || x>=n || y<0 || y>=m)
return 1;
if(vis[x][y] || map[x][y]=='#')
return 1;
return 0;
}
void bfs()
{
int i;
queue Q;
node a,next;
a.x = sx;
a.y = sy;
a.step = 0;
vis[a.x][a.y]=1;
Q.push(a);
while(!Q.empty())
{
a = Q.front();
Q.pop();
if(map[a.x][a.y]=='E')
{
ans = a.step;
return ;
}
for(i = 0; i<4; i++)
{
next = a;
next.x+=to[i][0];
next.y+=to[i][1];
if(check(next.x,next.y))
continue;
next.step=a.step+1;
vis[next.x][next.y] = 1;
Q.push(next);
}
}
ans = -1;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int i,j;
for(i = 0; i