前面幾個都AC了,可是第四測資跑不過,有什麼地方可以改更快嗎?
還是我根本該換個方法
------------------
以下是我的程式,覺得排版不方便看的可以看這邊http://codepad.org/DDa5PSqw
#include<stdio.h>
char maze[101][101]={0};
int end=0;
int main()
{
int i,j,N;
scanf("%d",&N);
for(i=1 ;i<=N ;i++ )
for(j=1 ;j<=N ;j++ )
scanf(" %c",&maze[i][j]);
int x=2,y=2,count[2];
count[1]=1; count[0]=100000;
Go(N,x,y,count);
if(end==0)
printf("No solution!\n");
else
printf("%d\n",count[0]);
}
void Go(int N,int x,int y,int count[])
{
maze[x][y]='#';
//printf("(x=%d y=%d count0=%d count1=%d)\n",x,y,count[0],count[1]);
if(x==N-1 && y==N-1)
{
if(count[1]<count[0])
{
count[0]=count[1];
end++;
return;
}
}
else if(maze[x][y+1]=='#' && maze[x+1][y]=='#' &&\
maze[x][y-1]=='#' && maze[x-1][y]=='#')
{
return;
}
if(maze[x][y+1]!='#')
{
count[1]++;
Go(N,x,y+1,count);
count[1]--;
maze[x][y+1]='.';
}
if(maze[x+1][y]!='#')
{
count[1]++;
Go(N,x+1,y,count);
count[1]--;
maze[x+1][y]='.';
}
if(maze[x][y-1]!='#')
{
count[1]++;
Go(N,x,y-1,count);
count[1]--;
maze[x][y-1]='.';
}
if(maze[x-1][y]!='#')
{
count[1]++;
Go(N,x-1,y,count);
count[1]--;
maze[x-1][y]='.';
}
}