案例只对了两个。不知道怎么修改好?
链接
已经打出来的代码。
#include <bits/stdc++.h>
using namespace std;
char a[50][50];
//存储输入的矩阵。
int d[50][50],n,m,xx,yy;
//d数组保存到达每一个点的最少是时间
void o(char c){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==c){
xx=i;
yy=j;
return ;
}
}
}
}
//递推函数,x是行,y是列,num是到那个点的时间。
void dfs(int x,int y,int num){
if(x<=n&&x>=1&&y<=m&&y>=1&&(((a[x][y]=='@'||a[x][y]=='a')&&d[x][y]>num+1)||(a[x][y]=='x'&&d[x][y]>num+2)||(a[x][y]=='r'&&d[x][y]!=1))){
//判断如果那个位置是守卫的话,那么就额外加一个时间单位。
if(a[x][y]=='x'){
d[x][y]=num+1;
dfs(x,y+1,num+2);
dfs(x+1,y,num+2);
dfs(x,y-1,num+2);
dfs(x-1,y,num+2);
}else{
d[x][y]=num;
dfs(x,y+1,num+1);
dfs(x+1,y,num+1);
dfs(x,y-1,num+1);
dfs(x-1,y,num+1);
}
}
}
int main(){
int t1,t2,s1,s2;
//输入行和列
cin>>n>>m;
//输入矩阵
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
d[i][j]=INT_MAX;
}
}
//查找开始的骑士在哪个位置.
o('r');
s1=xx;
s2=yy;
//查找公主的位置。
o('a');
t1=xx;
t2=yy;
dfs(s1,s2,1);
if(d[t1][t2]==INT_MAX)cout<<"Impossible";
else cout<<d[t1][t2]-2;
return 0;
}
请求如何更改?