SDUT 1269 走迷宫(BFS)

时间:2023-03-09 08:03:48
SDUT 1269 走迷宫(BFS)

点我看题目

题意:中文不详述。

思路 :上上上场比赛让一个BFS给虐了,上次比赛让一个三维的给废掉了。。。。。。。所以急于从水题刷起。。。。。。还因为数组开小了WA了5,6次

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std; int m,n,sx,sy,ex,ey ;
int mapp[][] ;
int vis[][] ;
int mpx[],mpy[] ;
int dire[][] = {{,-},{-,},{,},{,}} ;
int flag ;
int step ; void DFS(int x,int y)
{
if(x == ex && y == ey)
{
flag = ;
for(int i = ; i < step ; i++)
printf("(%d,%d)->",mpx[i],mpy[i]) ;
printf("(%d,%d)\n",ex,ey) ;
}
else
{
for(int i = ; i < ; i++)
{
int xx = x+dire[i][] ;
int yy = y+dire[i][] ;
if(mapp[xx][yy] && xx >= && xx <= m && yy >= && yy <= n && !vis[xx][yy])
{
step++ ;
vis[xx][yy] = ;
mpx[step] = xx ;
mpy[step] = yy ;
DFS(xx,yy) ;
vis[xx][yy] = ;
step-- ;
}
}
}
}
int main()
{
while(~scanf("%d %d",&m,&n))
{
memset(vis,,sizeof(vis)) ;
memset(mpx,,sizeof(mpx)) ;
memset(mpy,,sizeof(mpy)) ;
for(int i = ; i <= m ; i++)
for(int j = ; j <= n ; j++)
scanf("%d",&mapp[i][j]) ;
scanf("%d %d",&sx,&sy) ;
scanf("%d %d",&ex,&ey) ;
step = ;
mpx[] = sx ;
mpy[] = sy ;
vis[sx][sy] = ;
flag = ;
DFS(sx,sy) ;
if(!flag)
printf("-1\n") ;
}
return ;
}