日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)

發(fā)布時(shí)間:2024/4/19 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1445 變色DNA
基準(zhǔn)時(shí)間限制:1 秒 空間限制:131072 KB 分值: 40 難度:4級(jí)算法題
有一只特別的狼,它在每個(gè)夜晚會(huì)進(jìn)行變色,研究發(fā)現(xiàn)它可以變成N種顏色之一,將這些顏色標(biāo)號(hào)為0,1,2…N-1。研究發(fā)現(xiàn)這只狼的基因中存在一個(gè)變色矩陣,記為colormap,如果colormap[i][j]=’Y’則這只狼可以在某一個(gè)夜晚從顏色i變成顏色j(一晚不可以變色多次),如果colormap[i][j]=‘N’則不能在一個(gè)晚上從i變成j色。進(jìn)一步研究發(fā)現(xiàn),這只狼每次變色并不是隨機(jī)變的,它有一定策略,在每個(gè)夜晚,如果它沒法改變它的顏色,那么它就不變色,如果存在可改變的顏色,那它變?yōu)闃?biāo)號(hào)盡可能小的顏色(可以變色時(shí)它一定變色,哪怕變完后顏色標(biāo)號(hào)比現(xiàn)在的大)。現(xiàn)在這只狼是顏色0,你想讓其變?yōu)轭伾玁-1,你有一項(xiàng)技術(shù)可以改變狼的一些基因,具體說你可以花費(fèi)1的代價(jià),將狼的變色矩陣中的某一個(gè)colormap[i][j]=’Y’改變成colormap[i][j]=’N’。問至少花費(fèi)多少總代價(jià)改變狼的基因,讓狼按它的變色策略可以從顏色0經(jīng)過若干天的變色變成顏色N-1。如果一定不能變成N-1,則輸出-1.
Input
多組測試數(shù)據(jù),第一行一個(gè)整數(shù)T,表示測試數(shù)據(jù)數(shù)量,1<=T<=5
每組測試數(shù)據(jù)有相同的結(jié)構(gòu)構(gòu)成:
每組數(shù)據(jù)第一行一個(gè)整數(shù)N,2<=N<=50。
之后有N行,每行N個(gè)字符,表示狼的變色矩陣,矩陣中只有‘Y’與‘N’兩種字符,第i行第j列的字符就是colormap[i][j]。
Output
每組數(shù)據(jù)一行輸出,即最小代價(jià),無解時(shí)輸出-1。
Input示例
3
3
NYN
YNY
NNN
8
NNNNNNNY
NNNNYYYY
YNNNNYYN
NNNNNYYY
YYYNNNNN
YNYNYNYN
NYNYNYNY
YYYYYYYN
6
NYYYYN
YNYYYN
YYNYYN
YYYNYN
YYYYNN
YYYYYN
Output示例
1
0
-1

這題很暴力,不過要想通的一點(diǎn)是,cost[i][j] = 第i行j之前出現(xiàn)的‘Y’的數(shù)量。
然后求單源最短路徑即可,注意:求出為INF即為不可達(dá),輸出-1。

Bellman-Ford算法詳解:http://www.cnblogs.com/zhangjiuding/p/7712435.html

代碼:

#include <iostream> #include <algorithm> #include <map> #include <vector> using namespace std; typedef long long ll; #define INF 2147483647struct edge{int from,to,cost; };int t,n,E; edge es[2510]; int d[55];char color[55][55];//Bellman-Ford算法求單源最短路徑 void shortest_path(int s){fill(d,d+n,INF);d[s] = 0;while(true){bool update = false;for(int i = 0;i < E; i++){edge e = es[i];if(d[e.from] != INF && d[e.to] > d[e.from] + e.cost){d[e.to] = d[e.from] + e.cost;update = true;}}if(!update) break;} }int main(){cin >> t;while(t--){cin >> n;int f = 0;E = 0;for(int i = 0;i < n; i++){int cost = 0;for(int j = 0;j < n; j++){cin >> color[i][j];if(color[i][j] == 'Y'){es[E].from = i;es[E].to = j;es[E].cost = cost;cost++; E++;}}if(color[i][n-1] == 'Y') f = 1;}shortest_path(0);if(d[n-1] != INF)cout << d[n-1] <<endl;else cout << -1 << endl;}return 0; }

總結(jié)

以上是生活随笔為你收集整理的51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。