C語言簡單迷宮問題,深搜

簡單迷宮深搜-C

 

自己出的小迷宮題:給出迷宮,求出共多少方法,和最小最大路程。0表示可走,1表示牆,不可走。*表示入口,#表示出口。

以下爲代碼,因爲需要打印出各種路線,所以“+”號表示所走的路

#include<stdio.h>
char a[50][50];
int n,m,time=0,min=1000,max=-1;//n行,m列的迷宮 
int main()
{
	while(scanf("%d%d%*c",&n,&m)!=EOF)
	{
		int i,ii,jj,j,sum=0;//ii,jj爲入口地址 ,sum爲多少種方法 
		for(i=0;i<n;i++)//給出迷宮 
	             gets(a[i]);
                for(i=0;i<n;i++) 
		    for(j=0;j<m;j++)
			if(a[i][j]=='*'){ii=i;jj=j;break;}	//找出入口ii,jj	
	        void sumserch (int ii,int jj,int *sum);//函數申明 
		sumserch(ii,jj,&sum);
	    printf("迷宮共有%d種解法,最短距離爲%d,最長距離爲%d\n",sum,min,max);
	}
}
void sumserch(int ii,int jj,int *sum)
{
	time++;   // 經過路程 
	if(a[ii][jj]=='+'||a[ii][jj]=='1'||ii>=n||ii<0||jj<0||jj>=m) //當不可走時,就退後,路程減一 
	    {time--;return;}     
	if(a[ii][jj]=='#') //找到出口 
	{
	    (*sum)++;     
	   
            if(time>max)max=time;  //是否路程最大 
            if(time<min) min=time; //是否路程最小 
	    time--;    //回退一步,找其他路線 
	    return;
	}
	a[ii][jj]='+';   //把當前所處位置變爲不可走,已經走過 
	sumserch(ii+1,jj,sum);  //向上 
	sumserch(ii-1,jj,sum);  //向下 
	sumserch(ii,jj+1,sum);  //向右 
	sumserch(ii,jj-1,sum);  //向左 
	a[ii][jj]='0';    //當前位置所有方向都搜索過了,重新變爲可走。 
	time--;     //回退一步 
}
轉載請註明出處,謝謝。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章