7-13 求迷宫最短通道
#include <iostream>
#include <string>
using namespace std;
int f(int ,int ,int ,int ,int maze[20][20]);
int f(int x,int y,int i,int n,int maze[20][20])
{
int d[10]={100},b,c=0,t,flag=0;
maze[x][y]=1;
if(x==n-2&&y==n-2)return i;
if(maze[x+1][y]==0) {d[0]=f(x+1,y,i+1,n,maze);flag=1;maze[x][y]=0;}
if(maze[x-1][y]==0) {d[1]=f(x-1,y,i+1,n,maze);flag=1;maze[x][y]=0;}
if(maze[x][y-1]==0) {d[2]=f(x,y-1,i+1,n,maze);flag=1;maze[x][y]=0;}
if(maze[x][y+1]==0) {d[3]=f(x,y+1,i+1,n,maze);flag=1;maze[x][y]=0;}
if(flag==0)return 100;
for(b=0;b<4;b++)if(d[b]==0)d[b]=100;
for(b=1;b<4;b++)if(d[c]>d[b])c=b;
return d[c];
}
int main()
{
int maze[20][20]={0},n,i,j,t;
cin>>n;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cin>>maze[i][j];
}
t=f(1,1,0,n,maze);
if(t==100||t==0)cout<<"No solution";
else cout<<t;
return 0;
}