题目
![](https://i-blog.csdnimg.cn/blog_migrate/7b29071489844d1771352f8642c098c4.png)
01010101001011001001010110010110100100001000101010
//00001000100000101010010000100000001001100110100101
//01111011010010001000001101001011100011000000010000
//01000000001010100011010000101000001010101011001011
//00011111000000101000010010100010100000101100000000
//11001000110101000010101100011010011010101011110111
//00011011010101001001001010000001000101001110000000
//10100000101000100110101010111110011000010000111010
//00111000001010100001100010000001000101001100001001
//11000110100001110010001001010101010101010001101000
//00010000100100000101001010101110100010101010000101
//11100100101001001000010000010101010100100100010100
//00000010000000101011001111010001100000101010100011
//10101010011100001000011000010110011110110100001000
//10101010100001101010100101000010100000111011101001
//10000000101100010000101100101101001011100000000100
//10101001000000010100100001000100000100011110101001
//00101001010101101001010100011010101101110000110101
//11001010000100001100000010100101000001000111000010
//00001000110000110101101000000100101001001000011101
//10100101000101000000001110110010110101101010100001
//00101000010000110101010000100010001001000100010101
//10100001000110010001000010101001010101011111010010
//00000100101000000110010100101001000001000000000010
//11010000001001110111001001000011101001011011101000
//00000110100010001000100000001000011101000000110011
//10101000101000100010001111100010101001010000001000
//10000010100101001010110000000100101010001011101000
//00111100001000010000000110111000000001000000001011
//10000001100111010111010001000110111010101101111000
#include<bits/stdc++.h>
#define MAXSIZE 2000
using namespace std;
int v[35][55]={0};
char a[35][55];
int m=999999999,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
struct mystack{
char *base ;
char *top; //指针可以对应一个值的大小
int size;
void pop(){
if(this->top==this->base)
return ;
else
--this->top;
};
void push(char data){
if(this->top-this->base==MAXSIZE)
return ;
*this->top++=data;
};
void foreach(){
// 栈遍历是倒着的,需要正向输出自定义输出即可
while(this->top!=this->base){
cout<<*this->base++;
}
cout<<endl;
}
};
void dfs(int x,int y,int step,mystack s){
//不能引用的&s,因为引用最后遍历无法回溯,引用就是对该栈本身操作
if(x==30&&y==50){
if(step<m){
m=step;
s.foreach();
cout<<"Complete"<<endl;
}
}
for(int i=0;i<=3;i++){
int tx=x+dx[i];
int ty=y+dy[i];
if(v[tx][ty]==0&&a[tx][ty]=='0'){
v[tx][ty]=1;
if(i==0)
s.push('R');
else if(i==1)
s.push('D');
else if(i==2)
s.push('L');
else if(i==3)
s.push('U');
dfs(tx,ty,step+1,s);
s.pop();
v[tx][ty]=0;
}
}
return ;
}
int main(){
for(int i=1;i<=30;i++){
for(int j=1;j<=50;j++){
cin>>a[i][j];
}
}
v[1][1]=1;
mystack s;
s.base=new char[MAXSIZE]; // 栈底开辟空间<<<开辟空间就能保存数据了>>>
s.top=s.base;
// cout<<(void*)s.top<<endl; // 转换成void* 就可以输出地址
s.size=MAXSIZE;
dfs(1,1,1,s); return 0;
}