〈一〉广度优先算法求解路径问题
int dir[4][2] = {{-1,0},{0,-1},{1,0},{0,1}};
bool in(int x,int y){
return 0 <= x && x < n && 0 <= y && y < m;
}
struct node{
int x,y,d;
node(int xx,int yy,int dd){
x = xx;
y = yy;
d = dd;
}
};
int bfs(int sx,int sy){
queue<node> q;
q.push(node(sx,sy,0));
vis[sx][sy] = true;
while(!q.empty()){
node now = q.front();
q.pop();
for(int i = 0;i < 4;i++){
int tx = now.x + dir[i][0];
int ty = now.y + dir[i][1];
if(int(tx,ty) && maze[tx][ty] != '*' && !vis[tx][ty]){
if(maze[tx][ty] == 'T'){
return now.d + 1;
}else{
vis[tx][ty] = true;
q.push(node(tx,ty,now.d + 1));
}
}
}
}
return -1;
〈二〉深度优先算法求解最短步数
//针对深度优先算法之中里面查找最短路径的求解计算
#include<iostream>
#include<string>
using namespace std;
int n,m;
string maze[110];
bool vis[110][110];
int ans= 100000000;
int dir[4][2] = {{-1,0},{0,-1},{1,0},{0,1}};
bool in(int x,int y){
return 0 <= x && x < n&& 0<=y&&y <m;
}
void dfs(int x,int y ,int step){
if(maze[x][y] == 'T'){
if(step < ans){
ans = step;
}
return;
}
vis[x][y] = 1;
for(int i = 0;i < 4;i++){
int tx = x + dir[i][0];
int ty = y + dir[i][1];
if(in{tx,ty} && maze[tx][ty] != '*' && !vis[tx][ty]){
dfs(tx,ty,step + 1);
}
}
vis[x][y] = 0;
}