NYOJ 最少步數

2022-01-12 06:36:16 字數 2132 閱讀 4163

時間限制:3000 ms  |  記憶體限制:65535 kb

難度:4

描述這有乙個迷宮,有0~8行和0~8列:

1,1,1,1,1,1,1,1,1

1,0,0,1,0,0,1,0,1

1,0,0,1,1,0,0,0,1

1,0,1,0,1,1,0,1,1

1,0,0,0,0,1,0,0,1

1,1,0,1,0,1,0,0,1

1,1,0,1,0,1,0,0,1

1,1,0,1,0,0,0,0,1

1,1,1,1,1,1,1,1,1

0表示道路,1表示牆。

現在輸入乙個道路的座標作為起點,再如輸入乙個道路的座標作為終點,問最少走幾步才能從起點到達終點?

(注:一步是指從一座標點走到其上下左右相鄰座標點,如:從(3,1)到(4,1)。)

輸入第一行輸入乙個整數n(0

輸出輸出最少走幾步。

樣例輸入

2

3 1 5 7

3 1 6 7

樣例輸出

12

11用dfs 或 bfs進行窮舉

(1)dfs

#include #include #define inf 80

int res,flag[9][9];

int maze[9][9]=;

void dfs(int si,int sj,int ei,int ej,int count)

if(si<0 || si>8 || sj<0 || sj>8 || flag[si][sj] || maze[si][sj]) return;

flag[si][sj]=1;

// four corners

if((si==0 || si==8) && ((sj==0 || sj==8)))

else if(si==0 && sj==8)

else if(si==8 && sj==0)

else

dfs(ssi,ssj,ei,ej,count+1);

dfs(sssi,sssj,ei,ej,count+1);

} //four edges

else if(!(si>0 && si<8 && sj>0 && sj<8))

else if(si==8)

else if(sj==0)

else

dfs(ssi,ssj,ei,ej,count+1);

dfs(sssi,sssj,ei,ej,count+1);

dfs(ssssi,ssssj,ei,ej,count+1);

} else

flag[si][sj]=0;

}int main()

return 0;

}

(2)bfs

bfs求最小步數之所以不用更新距離d,是因為訪問任何乙個點(i,j)

必然都是距離(si,sj)最短距離(聯想起bfs的分支圖即明白這一點)

#include #include #include using namespace std;

typedef pairp; //用結構體struct point亦可

const int inf=80;

char maze[10][10]=;

int sx,sy,gx,gy;

int d[9][9]; //出發點到(i,j)的最短路徑,同時起到判斷是否已訪問的作用

int dis[4][2]=;

void init()

void bfs()

} }printf("%d\n",d[gx][gy]);

}int main()

return 0;

}

對bfs的一點補充。。。

我們實際可以不用定義點,只要能夠對不同的點進行區分即可,用9*i+j可將二維的點轉化為一維(實際有點時間換空間的意味,全當另一種方法的了解),核心如下:

int graph[81],front,rear;front和rear共同起到佇列的作用,入隊,graph[rear++]=9*i+j(入隊點為(i,j)),出隊時,x=graph[front]/9,y=graph[front++]%9;

其餘同bfs**

其中,bfs的**參照:

NYOJ 最少步數

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1...

NYOJ 最少步數

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,...

nyoj 最少步數

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,...