迷宫问题

题意:给出一个5*5的迷宫图,打印从(0,0)到(4,4)的路径。

分析:基础dfs,注意记录路径。

#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
int map[5][5],id[5][5],dx[4]={1,-1,0,0},dy[4]={0,0,-1,1};
struct node{
    int x,y,step;
    queue<int>p;
    node(bool flag=false){if(flag){x=y=step=0;p.push(0),p.push(0);}}
};
void init(){
    range(i,0,4)range(j,0,4)cin>>map[i][j];
}
bool judge(int x,int y){
    if(x<0||y<0||x>5||y>5)return false;
    else return true;
}//判断边界
void solve(){
    fill(id,0);
    queue<node>q;
    id[0][0]=1;
    q.push(node(true));
    while(!q.empty()){
        node t1=q.front();
        q.pop();
        if(t1.x==4&&t1.y==4)
            while(!t1.p.empty()){
                int x=t1.p.front();
                t1.p.pop();
                int y=t1.p.front();
                t1.p.pop();
                cout<<"("<<x<<", "<<y<<")"<<endl;
            }
        range(i,0,3){
            node t2=t1;
            t2.x+=dx[i];
            t2.y+=dy[i];
            if(!id[t2.x][t2.y]&&judge(t2.x,t2.y)&&!map[t2.x][t2.y]){
                t2.p.push(t2.x);
                t2.p.push(t2.y);
                t2.step++;
                id[t2.x][t2.y]=1;
                q.push(t2);
            }
        }
    }
}
int main() {
    init();
    solve();
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/Rhythm-/p/9323429.html