题解 | #迷宫问题#
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
#include <cstring>
#include <iostream>
#include <memory.h>
using namespace std;
int ans[100],len,t[100],n,m,maze[11][11],ma[11][11];
void dfs(int i,int j,int k){
if(i==n&&j==m) {
k--;
if(k<len) {
memcpy(ans, t, sizeof(int)*(k+1));
len=k;
}
return;
}
if(ma[i][j]==1) return;
ma[i][j]=1;
if(i<n&&maze[i+1][j]==0) {
t[k]=1;
dfs(i+1,j,k+1);
}
if(j<m&&maze[i][j+1]==0) {
t[k]=2;
dfs(i,j+1,k+1);
}
if(i>1&&maze[i-1][j]==0) {
t[k]=3;
dfs(i-1,j,k+1);
}
if(j>1&&maze[i][j-1]==0) {
t[k]=4;
dfs(i,j-1,k+1);
}
ma[i][j]=0;
return;
}
int main() {
int i,j,x,y;
cin>>n>>m;
len=100000;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>maze[i][j];
dfs(1,1,1);
x=y=0;
cout<<'('<<0<<','<<0<<')'<<endl;
for(i=1;i<=len;i++){
//cout<<ans[i]<<endl;
switch (ans[i]) {
case 1: x++;break;
case 2: y++;break;
case 3: x--;break;
case 4: y--;break;
}
cout<<'('<<x<<','<<y<<')'<<endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")
不是从1开始赋值的memcpy(ans, t, sizeof(int)*(k+1));k要加1,当然,从1赋值就很不对

查看14道真题和解析