dfs-图的深度优先遍历
混编吧
全部回复
仅看楼主
level 11
歆沣 楼主
/*
dfs深度优先遍历
*/
#include<iostream>
using namespace std;
#define N 50
#define max 999999
int map[N][N];//图的矩阵形式
bool state[N][N]={0};//搜索状态
int sx,sy,ex,ey;//搜索的起止坐标
int minStep=max;//最少步数
int h;//图的高度
int w;//图的宽度 //接受用户输入
void input(){
cin>>h>>w;
for(int i=0;i<h;i++)
for(int j=0;j<w;j++)
cin>>map[i][j];
cin>>sx>>sy;
cin>>ex>>ey;
sx--;sy--;
ex--;ey--;
}//深度优先搜索
void dfs(int x,int y,int step){
if(x<0||y<0||x>=h||y>=w||map[x][y]==1||state[x][y]==1)return;
if(x==ex&&y==ey){
if(step<minStep)minStep=step;
return;
}
state[x][y]=1;
dfs(x-1,y,step+1);
dfs(x+1,y,step+1);
dfs(x,y-1,step+1);
dfs(x,y+1,step+1);
state[x][y]=0;
}int main(){
input();
dfs(sx,sy,0);
cout<<minStep<<endl;
}
傲世孤尘
2013-05-31
2013年07月22日 14点07分 1
1