深搜dfs

来源:互联网 发布:阿里云 搭建云流量 编辑:程序博客网 时间:2024/06/05 03:32

深搜是找到每条可以从起点到终点的路径然后比较输出最短的路径,这些路径是一条一条找的;而广搜是同时找可能存在的路径,直到找的终点为止,最先找到终点的路径一定是最短路径,因为广搜每次路径都是同时移动一步,最先找到的就是移动步数最少的路径。 当迷宫大小是100*100格时用深搜是会超时的。

#include<stdio.h>#include<string.h>int a[51][51],book[51][51];int x2,y2,min=99999999,m,n;void dfs(int x,int y,int s){int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}};int k,tx,ty;//printf("%d  %d\n",x,y);if(x==x2&&y==y2){if(min>s)min=s;return ;}for(k=0;k<=3;k++){tx=x+next[k][0];ty=y+next[k][1];if(tx<1||tx>m||ty>n||ty<1)continue;if(a[tx][ty]==0&&book[tx][ty]==0){book[tx][ty]=1;dfs(tx,ty,s+1);book[tx][ty]=0;}}return ;}int main(){int x1,y1,i,j,k,l;while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)){memset(a,0,sizeof(a));scanf("%d%d",&m,&n);for(i=1;i<=m;i++)for(j=1;j<=n;j++)scanf("%d",&a[i][j]);book[x1][y1]=1;dfs(x1,y1,0);printf("%d\n",min);}return 0;}/*1 1 4 35 40 0 1 00 0 0 00 0 1 00 1 0 00 0 0 17*/