您的位置:首页 > 其它

UVa 10452 - Marcus

2016-04-05 18:58 369 查看
#include <iostream>
#define EOF (-1)

using namespace std;

char Path[12][100];
int Step[7]={0};//记录走过的足迹
char example[8] = {'@','I','E','H','O','V','A','#'};

void Dfs(int n,int m,int ex);
int main(){
int line,m,n;
string Commands[3]={"forth","left","right"};
//freopen("D:\\t.txt","r",stdin);
while((cin>>line)&&(line!=EOF)){
for(int i = 0;i < line;i++){
cin>>n>>m;//输入鹅卵石路的宽m,长n
for(int j=0;j<n;j++){
for(int k=0;k<m;k++){
cin>>Path[j][k];
}
}

for(int q = 0;q < m;q++){
if(example[0] == Path[n-1][q]){
Dfs(n-1,q,0);
break;
}
}
for(int t = 0;t < 7;t++){
cout<<Commands[Step[t]];
if(t<6)cout <<" ";
}
cout<<endl;
}
}
return 0;
}

void Dfs(int n,int m,int ex)
{
if( (Path[n-1][m] == example[ex+1]) && (ex<7)) {
Step[ex] = 0;
Dfs(n-1,m,ex+1);
}
if( (Path
[m-1] == example[ex+1]) && (ex<7)){
Step[ex] = 1;
Dfs(n,m-1,ex+1);
}
if( (Path
[m+1] == example[ex+1]) && (ex<7)){
Step[ex] = 2;
Dfs(n,m+1,ex+1);
}
}


原来递归运算时陷入了死循环,加上“ex>7”的判定,就好了;

输入的时候注意m,n(我是新手(*^__^*) )

题目意思很简单,就是沿着一个路径走到底就行,用dfs解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: