迷宫问题

来源:互联网 发布:特朗普越南知乎 编辑:程序博客网 时间:2024/06/06 10:03
#include<bits/stdc++.h>using namespace std;struct Point{    int x;    int y;}tp;int dir[4][2]={0,1,0,-1,1,0,-1,0};int n,m;int Map[20][20];int flag[20][20];void dfs(vector<Point>&v,Point p)    {        if(p.x==n-1&&p.y==m-1)        {            for(int i=0;i<v.size();i++)            {                cout<<"("<<v[i].x<<","<<v[i].y<<")"<<endl;            }            return ;        }    for(int i=0;i<4;i++)    {        int tx=p.x+dir[i][0],ty=p.y+dir[i][1];        if(tx<n&&tx>=0&&ty<m&&ty>=0&&Map[tx][ty]==0&&flag[tx][ty]==0)        {            tp.x=tx,tp.y=ty;            flag[tx][ty]=1;            v.push_back(tp);            dfs(v,tp);            //用深搜第一次找到就是最短路            //回溯时用到以下两句,可求出所有可行路径            //flag[tx][ty]=0;            //v.pop_back();                    }    }}int main()    {        while(cin>>n>>m)        {            memset(flag,0,sizeof(flag));            for(int i=0;i<n;i++)                for(int j=0;j<m;j++)                cin>>Map[i][j];            vector<Point>v;            tp.x=0,tp.y=0;            v.push_back(tp);            flag[0][0]=1;//起始点一定要标标为已访问,否则会重复访问起点            dfs(v,tp);        }    return 0;}