dfs深度優(yōu)先搜索-象棋走馬步


解題思路:
dfs深搜,對馬可以走的八個方向用一個dir[4][2]的數(shù)組存儲,然后再依次深搜,如果可以走到就返回true,否則返回false;然后回溯上一個節(jié)點,直到看是否有沒有走到終點‘T’,如果有,就f=true,否則就沒有false;
代碼:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#include<string.h>?
char s[10][10];
bool f;
bool vis[10][10];
int dir[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
bool in(int x,int y){
return 0<=x&&x<10&&0<=y&&y<9;
}
void dfs(int x,int y){
vis[x][y]=true;
if(f){
return;
}
if(s[x][y]=='T'){
f=true;
return;
}
for(int i=0;i<10;i++){
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(in(tx,ty)&&s[tx][ty]!='#'&&!vis[tx][ty]){
dfs(tx,ty);
}
}
}
int main(){
int x,y;
for(int i=0;i<10;i++){
scanf("%s",s[i]);
}
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(s[i][j]=='S'){
x=i;
y=j;
}
}
}
dfs(x,y);
if(f){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
return 0;
}