纯新人,代码可能不完善,只把参考示例验证了一下。
在输入上写的不完善,但不影响主要的代码。
完整代码
。
#include <iostream>
#include <cstdio>
#include <queue>
#include <set>
#include <map>
using namespace std;
#define MAX 100
#define INF 10003
int Map[MAX][MAX];
int dx[4]={-1,0,1,0};
int dy[4]={0,-1,0,1};
// n-->竖直长度
// m-->水平长度
int n,m;
int ans=INF;
void dfs(int x,int y,int res){
if(res>10){
return ;
}
int nx,ny;
for(int i=0;i<4;i++){
nx=x+dx[i];
ny=y+dy[i];
if(Map[ny][nx]==1)continue;
while(0<=ny&&ny<n&&0<=nx&&nx<m&&Map[ny][nx]!=1&&Map[ny][nx]!=3){
nx+=dx[i];
ny+=dy[i];
}
if(nx<0||nx>=m||ny<0||ny>=n){
nx=x;
ny=y;
continue;
}
if(Map[ny][nx]==1&&0<=ny&&ny<n&&0<=nx&&nx<m){
Map[ny][nx]=0;
dfs(nx-dx[i],ny-dy[i],res+1);
Map[ny][nx]=1;
}
if(Map[ny][nx]==3&&0<=ny&&ny<n&&0<=nx&&nx<m){
if(res<ans)ans=res;
break;
}
}
}
void solve(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>Map[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(Map[i][j]==2){
dfs(j,i,1);
break;
}
}
}
cin>>n>>m;
}
int main(){
solve();
return 0;
}