湖南省第七屆大學生計算機程式設計競賽 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作為乙個等待檢查的方...