迷宫问题
题意:给出一个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; }