網路流 24 題 孤島營救問題 最短路

2021-08-30 06:43:23 字數 1019 閱讀 6044

題意:給你乙個n*m的圖,你要從(1,1)出發到達(n,m),路上會有最多p種牆和鑰匙。接下來會給你k個門,在x1,y1,x2,y2之間會有一扇ki型別的門,如果ki為0,那麼無法穿過,否則你要拿到對應ki的鑰匙才可以穿過,同理接下來會有s把鑰匙,這些鑰匙在xi,yi處,型別為ki。,每走一步需要1的時間,現在問你從起點到終點最少需要多少時間。

做法:好像做到過很多次了這種題目,因為題目的資料範圍很小,所以不需要太多的優化,直接做就好了,只是最短路在處理的時候加上乙個狀態這個量就好了,因為鑰匙和門的對應種類最多只有10,完全可以狀壓成狀態,01代表這個鑰匙是否被拿過,dp這個的時候也要加上狀態的量,然後用優先佇列減少寬搜時間,到達之後就可以直接break掉。

不過這題有個坑點,就是乙個格仔種可能會有多把鑰匙,沒看清這個條件wa了好幾次。難受巴巴。

#includeusing namespace std;

typedef long long ll;

int dir[4][2]=,,,};

int n,m,p,mp[150][150],k,dp[15][15][4000],key[15][15],ans;

struct node

node(int x,int y,int step,int state):x(x),y(y),step(step),state(state){}

bool operator < (const node &a) const

};int gain(int x,int y)

int ck(int state,int x,int y,int tx,int ty)

}void bfs()

for(int i=0;i<4;i++)

}else }}

}}

}int main()

scanf("%d",&k);

for(int i=1;i<=k;i++)

bfs();

printf("%d\n",ans);

return 0;

}

網路流24題 孤島營救問題 題解

題目傳送門 題目大意 給出一張網格圖,兩個格仔之間可能沒東西,可以直接通過,或者有門,需要鑰匙,又或者是牆,不可通過。一些格仔上有鑰匙,鑰匙和門一共有 p pp 種,相同種類的才可以使用,問從 1,1 1,1 1,1 走到 n,m n,m n,m 最短需要多少時間。眾所周知,網路流24題裡出一些廣搜...

網路流24題 6 孤島營救問題

為什麼又是奇奇怪怪的混進來的題啊qaq 又沒想出網路流解法啊qaq 看見p是10就又狀壓了吖qwq bfs跑一遍就吼了w 為啥子網路流24題總是狀壓 最短路 bfs啊qaq 哦對記得門和牆要建雙向邊 哭暈 include include include include includeusing na...

網路流24題 孤島營救問題(狀態壓縮 搜尋)

鏈結 題意 走迷宮問題,從 1,1 到 n,n 的最短時間,其中有牆,鑰匙和門的設定。做法 廣度優先搜尋 鑰匙串狀態壓縮 q 可這和網路流有什麼關係 a 標籤 網路流24題,沒了 ugly code include define n 200 using namespace std int n,m,p...