簡單迷宮深搜-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--; //回退一步
}
轉載請註明出處,謝謝。