1944 年,特種兵麥克接到國防部的命令,要求立即趕赴太平洋上的乙個孤島,營救被敵軍俘虜的大兵瑞恩。瑞恩被關押在乙個迷宮裡,迷宮地形複雜,但幸好麥克得到了 迷宮的地形圖。迷宮的外形是乙個長方形,其南北方向被劃分為n 行,東西方向被劃分為m列,於是整個迷宮被劃分為n×m 個單元。每乙個單元的位置可用乙個有序數對(單元的行號,單元的列號)來表示。南北或東西方向相鄰的2 個單元之間可能互通,也可能有一扇鎖著的門,或者是一堵不可逾越的牆。迷宮中有一些單元存放著鑰匙,並且所有的門被分成p類,開啟同一類的門的鑰匙相同, 不同類門的鑰匙不同。
大兵瑞恩被關押在迷宮的東南角,即(n,m)單元裡,並已經昏迷。迷宮只有乙個入口,在西北角。也就是說,麥克可以直接進入(1,1)單元。另外,麥克從乙個單元移動到另乙個相鄰單元的時間為1,拿取所在單元的鑰匙的時間以及用鑰匙開門的時間可忽略不計。
試設計乙個演算法,幫助麥克以最快的方式到達瑞恩所在單元,營救大兵瑞恩。
第1行有3個整數,分別表示n,m,p的值。
第2 行是1個整數k,表示迷宮中門和牆的總數。第i+2 行(1<=i<=k),有5 個整數,依次為xi1,yi1,xi2,yi2,gi:
當gi>=1時,表示(xi1,yi1)單元與(xi2,yi2)單元之間有一扇第gi類的門,當gi=0 時,表示(xi1,yi1)單元與(xi2,yi2)單元之間有一堵不可逾越的牆(其中,|xi1-xi2|+|yi1-yi2|=1,0& lt;=gi<=p)。
第k+3行是乙個整數s,表示迷宮中存放的鑰匙總數。
第k+3+j 行(1<=j<=s),有3個整數,依次為xi1,yi1,qi:表示第j 把鑰匙存放在(xi1,yi1)單元裡,並且第j 把鑰匙是用來開啟第qi類門的。(其中1<=qi<=p)。
輸入資料中同一行各相鄰整數之間用乙個空格分隔。
將麥克營救到大兵瑞恩的最短時間的值輸出。如果問題無解,則輸出-1。
4 4 991 2 1 3 2
1 2 2 2 0
2 1 2 2 0
2 1 3 1 0
2 3 3 3 0
2 4 3 4 1
3 2 3 3 0
3 3 4 3 0
4 3 4 4 0
22 1 2
4 2 1
14n,m,p<=10
k<=150
s<=15
分析:雖然它被歸類在網路流24題中,但實際上只是一道最短路問題,因為p很小,所以可以將擁有的鑰匙進行狀態壓縮,然後做最短路就好了。
**:
1 #include 2 #include 34#define cmp(x,y) ((x) > 0 && (x) <= n && (y) > 0 && (y) <= m)56
intn, m, p, k, s, x1, y1, x2, y2, g;
7int wall[15][15][15][15], map[15][15];8
int and[12] =;
11int x[4] = ;
12int y[4] = ;
13int dis[15][15][2048
];14
int quex[10000000], quey[10000000], key[10000000
], head, tail, nowx, nowy, nowk, tox, toy, tok;
1516
void
init()
1724 scanf("
%d", &s);
25for (int i = 0;i < s;i++)
2630}31
32void
bfs()
3361}62
}63}64 head++;65}
66}6768
void
print()
6976 printf("
%d", ans == dis[0][0][0] ? -1
: ans);77}
7879
intmain()
80
線性規劃與網路流24題 17 運輸問題
description w公司有m個倉庫和n 個零售商店。第i 個倉庫有ai個單位的貨物 第j個零售商店需要bj個單位的貨物。貨物供需平衡,即sigma ai sigma bj 從第i個倉庫運送每單位貨物到第j個零售商店的費用為cij。試設計乙個將倉庫中所有貨物運送到零售商店的運輸方案,使總運輸費用...
線性規劃與網路流24題 4 魔術球
線性規劃與網路流24題 4 魔術球 description 假設有n根柱子,現要按下述規則在這n根柱子中依次放入編號為 1,2,3,的球。1 每次只能在某根柱子的最上面放球。2 在同一根柱子中,任何2個相鄰球的編號之和為完全平方數。試設計乙個演算法,計算出在n根柱子上最多能放多少個球。例如,在4 根...
線性規劃與網路流24題 11航空路線問題
這個題輸出部分還有很多不解。感覺這題的給出的題解中沒考慮細節問題。比如第二組資料,按題解來說的話就不行了。就不貼那個題解了。詳細見程式。include include include includeusing namespace std define inf 1000000000 define m ...