题目位置:https://www.nowcoder.com//questionTerminal/571cfbe764824f03b5c0bfd2eb0a8ddf
题目解答的代码如下:
#include<iostream>
#include<stack>
using namespace std;
class position{
public:
int row;
int col;
position(){}
position(int rr,int cc):row(rr),col(cc){}
};
stack<position> path;
stack<position> minpath;
bool isPass(int **maze,int n,int m,position thispos){
if(thispos.row>=0&&thispos.row<n&&thispos.col>=0&&thispos.col<m
&&maze[thispos.row][thispos.col]==1)
return true;
else
return false;
}
void PrintPath(stack<position> &output){
stack<position> temp;
while(!output.empty()){
temp.push(output.top());
output.pop();
}
while(temp.size()>1){
cout<<'['<<temp.top().row<<','<<temp.top().col<<']'<<',';
temp.pop();
}
cout<<'['<<temp.top().row<<','<<temp.top().col<<']';
temp.pop();
}
void GetMazePath(int **maze,int n,int m,position cur,int p){
path.push(cur);
if(cur.row==0&&cur.col==m-1){
if(p>=0&&minpath.empty()||p>=0&&(path.size()<minpath.size())){
minpath=path;
}
}
position next;
maze[cur.row][cur.col]=2;//标记已经走过
next=cur;
next.row-=1;
if(isPass(maze,n,m,next))
GetMazePath(maze,n,m,next,p-3);
next=cur;
next.row+=1;
if(isPass(maze,n,m,next))
GetMazePath(maze,n,m,next,p);
next=cur;
next.col-=1;
if(isPass(maze,n,m,next))
GetMazePath(maze,n,m,next,p-1);
next=cur;
next.col+=1;
if(isPass(maze,n,m,next))
GetMazePath(maze,n,m,next,p-1);
maze[cur.row][cur.col]=1;
path.pop();
}
int main(){
int n=0,m=0,p=0;
while(cin>>n>>m>>p){
int **maze=new int*[n];
for(int i=0;i<n;i++){
maze[i]=new int [m];
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>maze[i][j];
}
}
position entry(0,0);
GetMazePath(maze,n,m,entry,p);
if(!minpath.empty()){
PrintPath(minpath);
}
else
cout<<"Can not escape!";
}
return 0;
}