最優對稱路徑

2021-06-10 05:47:03 字數 1362 閱讀 4077

湖南省第七屆大學生計算機程式設計競賽 the seventh hunan collegiate programming contest

題目g最優對稱路徑

給乙個n行n列的網格,每個格仔裡有乙個1到9的數字。你需要從左上角走到右下角,其中每一步只能往上、下、左、右四個方向之一走到相鄰格仔,不能斜著走,也不能走出網格,但可以重複經過乙個格仔。為了美觀,你經過的路徑還必須關於「左下-右上」這條對角線對稱。下圖是乙個6x6網格上的對稱路徑。

你的任務是統計所有合法路徑中,數字之和最小的路徑有多少條。

輸入輸入最多包含25組測試資料。每組資料第一行為乙個整數n(2<=n<=100)。以下n行每行包含n個1到9的數字,表示輸入網格。輸入結束標誌為n=0。

輸出對於每組資料,輸出合法路徑中,數字之和最小的路徑條數除以1,000,000,009的餘數。

樣例輸入

21 1

1 13

1 1 1

1 1 1

2 1 1

0樣例輸出23

可以按對角線折過來,然後最短路的求法,從(1,1)到對角線所有的點的最短路求出來,有點類似於spfa,把每個更新過的點加入佇列去做擴充套件,選出其中最小的路

然後從對角線上的點乙個個選滿足是最短的,然後從這些點中dfs找出所有的路線,這裡對於找過的路要標記一下用來剪支

**:

#include #include #include #include #include #include #include #include #include #define inf 10000

#define maxn 1000000009

using namespace std;

int matrix[205][205];

int d[205][205];

queueq;

int nx=;

int ny=;

int down[205][205];

int dp[205][205];

bool flag[205][205];

int n;

int check(int x,int y)

int dfs(int x,int y)

return dp[x][y]%maxn;

}int main()}}

}//spfa

int mins=10000;

for(int i=1,j=n;i<=n&&j>0;i++,j--)

if(d[i][j]0;i++,j--)

if(d[i][j]==mins)

path=(path%maxn+dfs(i,j)%maxn)%maxn;

printf("%d\n",path);}}

最優對稱路徑

給乙個n行n列的網格,每個格仔裡有乙個1到9的數字。你需要從左上角走到右下角,其中每一步只能往上 下 左 右四個方向之一走到相鄰格仔,不能斜著走,也不能走出網格,但可以重複經過乙個格仔。為了美觀,你經過的路徑還必須關於 左下 右上 這條對角線對稱。你的任務是統計所有合法路徑中,數字之和最小的路徑有多...

1106 最優對稱路徑(最短路 記憶化搜尋)

submit page summary time limit 1 sec memory limit 128 mb submitted 486 solved 135 給乙個n行n列的網格,每個格仔裡有乙個1到9的數字。你需要從左上角走到右下角,其中每一步只能往上 下 左 右四個方向之一走到相鄰格仔,不...

A (最優路徑)

尋路 尋找最短路徑並避開障礙物 首先將地圖虛擬化,將地圖劃分為乙個乙個的小方塊,這樣可以用二維陣列來表示地圖。如下所示,綠色塊 a 是起點,紅色塊 b 是終點,中間藍色塊是障礙物,白色塊是空地。先羅列出所有的步驟,等會按照例子一步一步分析 1 尋路步驟 步驟1.從起點a開始,把a作為乙個等待檢查的方...