深搜迷宫模板

来源:互联网 发布:淘宝炉石 编辑:程序博客网 时间:2024/05/30 22:43
深搜走迷宫
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int map[102][102],m,n;int x1,y1,x3,y3;int dis[4][2]= {1,0,0,1,-1,0,0,-1}; //方向数组,总共有四个方向int e;//仅储存,因题而异,可以没有。bool the;int vis[6][6];//记录这个点遍历过没有struct point{    int i,j,t;};//有三个属性,前两个是坐标,第三个时到达这个点的时间。point markway[1000];//记录途经点,最后输出用void dfs(int y,int x){    int i;    point rear;    for(i=0; i<4; i++)    {        rear.i=y+dis[i][0];        rear.j=x+dis[i][1];        if(rear.i>=1&&rear.j>=1&&rear.i<=m&&rear.j<=n)        {            if(map[rear.i][rear.j]!=0&&!vis[rear.i][rear.j])            {                e++;                markway[e]=rear;                markway[e].t=markway[e-1].t+1;                vis[rear.i][rear.j]=1;                if(y==y3&&x==x3)                {                    return ;                }                dfs(rear.i,rear.j);                //vis[rear.i][rear.j]=0;            }        }    }    return;}int main(){    int i,j;    char a;    while(~scanf("%d%d",&m,&n))    {        getchar();        for(i=1; i<=m; i++)        {            for(j=1; j<=n; j++)            {                scanf("%c",&a);                if(a=='0')                    map[i][j]=0;//墙                if(a=='2')                {                    map[i][j]=2;//起点                    y1=i;                    x1=j;                }                if(a=='1')                    map[i][j]=1;//路                if(a=='3')                {                    map[i][j]=3;//终点                    y3=i;                    x3=j;                }            }            getchar();        }        the=0;        memset(vis,0,sizeof(vis));        vis[1][1]=1;        dfs(y1,x1);        for(i=1; i<=e; i++)            printf("(%d,%d)=%d    ",markway[i].i,markway[i].j,markway[i].t);    }    return 0;}/**5 52101111010011111001131111*/



1 0