假设 一张地图 N行M列 ,0表示通畅1表示障碍物,P,Q表示终点坐标.求点(0,0)到(P,Q)最短路径
#include<iostream>
#include<stdio.h>
int minS=999999;//最小路程minS 防止和iostresm 里面的min命名冲突
int map[51][51]={0};//地图
int book[51][51]={0};//记录
int n,m;//地图大小
int p,q; //小哈位置 x=p y=q
using namespace std;
void dfs(int x,int y,int step){
int next[4][2]={//遍历方式
{0,1},{1,0},{0,-1},{-1,0}
};
if(x==p-1 && y==q-1){ //到达重点位置
if(step<=minS){
minS=step;
printf("走到终点~~~~~~~~~~~~~\n")
}
return ; //返回上一步
}
for(int k=0;k<4;k++){ //下一步
int nx=x+next[k][0];
int ny=y+next[k][1];
if(nx>=n || ny>=m ||nx<0 || ny<0){ //边界判断
continue ; //到达边界后重新计算XY
}
if(map[nx][ny]==0 && book[nx][ny]==0){
book[nx][ny]=1;//设置标记 表示已经走过了
printf("(%d,%d,%d)\n",nx,ny,step+1); //输出路径
dfs(nx,ny,step+1);//向下搜索
book[nx][ny]=0;//撤回操作
}
}
return ;//返回上一步
}
int main(){
cin>>n>>m; //输入地图大小 n行m列
cin>>p>>q; //输入位置 x=p,y=q
//循环载入地图
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>map[i][j];
}
}
dfs(0,0,0);//开始第一步
cout<<"最短路径为:"<<minS<<endl;
system("pause");
return 0;
}