#11373: 第四測資點執行逾時


cclemon (堅果哥)

學校 : 臺北市立第一女子高級中學
編號 : 58628
來源 : [59.120.181.150]
最後登入時間 :
2018-12-09 08:32:05
a982. 迷宮問題#1 | From: [140.113.64.76] | 發表日期 : 2016-09-20 01:31

前面幾個都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]='.';
}
}

 
#11771: Re:第四測資點執行逾時


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
a982. 迷宮問題#1 | From: [1.172.86.112] | 發表日期 : 2017-02-25 00:55

要不要試試看用 BFS 解?

 
#16933: Re:第四測資點執行逾時


giant0620 (BlenderWang)

學校 : 國立彰化師範大學
編號 : 61100
來源 : [140.113.207.98]
最後登入時間 :
2022-07-25 14:26:46
a982. 迷宮問題#1 | From: [118.163.203.106] | 發表日期 : 2019-02-22 19:18

要不要試試看用 BFS 解?



感謝提醒,不然我一定會一直卡在用DFS解然後不知道為甚麼會逾時的窘境裡

 
ZeroJudge Forum