51nod 1445 變色DNA 最短路

2022-04-17 10:21:12 字數 2439 閱讀 8860

1445 變色dna

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 難度:4級演算法題

收藏關注有乙隻特別的狼,它在每個夜晚會進行變色,研究發現它可以變成n種顏色之一,將這些顏色標號為0,1,2...n-1。研究發現這只狼的基因中存在乙個變色矩陣,記為colormap,如果colormap[i][j]='y'則這只狼可以在某乙個夜晚從顏色i變成顏色j(一晚不可以變色多次),如果colormap[i][j]=『n』則不能在乙個晚上從i變成j色。進一步研究發現,這只狼每次變色並不是隨機變的,它有一定策略,在每個夜晚,如果它沒法改變它的顏色,那麼它就不變色,如果存在可改變的顏色,那它變為標號盡可能小的顏色(可以變色時它一定變色,哪怕變完後顏色標號比現在的大)。現在這只狼是顏色0,你想讓其變為顏色n-1,你有一項技術可以改變狼的一些基因,具體說你可以花費1的代價,將狼的變色矩陣中的某乙個colormap[i][j]='y'改變成colormap[i][j]='n'。問至少花費多少總代價改變狼的基因,讓狼按它的變色策略可以從顏色0經過若干天的變色變成顏色n-1。如果一定不能變成n-1,則輸出-1.

input

多組測試資料,第一行乙個整數t,表示測試資料數量,1<=t<=5

每組測試資料有相同的結構構成:

每組資料第一行乙個整數n,2<=n<=50。

之後有n行,每行n個字元,表示狼的變色矩陣,矩陣中只有『y』與『n』兩種字元,第i行第j列的字元就是colormap[i][j]。

output

每組資料一行輸出,即最小代價,無解時輸出-1。
input示例

3

3nyn

ynynnn

8nnnnnnny

nnnnyyyy

ynnnnyyn

nnnnnyyy

yyynnnnn

ynynynyn

nynynyny

yyyyyyyn

6nyyyyn

ynyyyn

yynyyn

yyynyn

yyyynn

yyyyyn

output示例

10-1

單源最短路

注意變色的策略 先變最小的 所以構圖的時候每一行前面有多少個y這條路徑的值我們就標記為幾

#include #include #include #include #include #include #include #include #include using namespace std;

#define fin freopen("input.txt","r",stdin);

#define fout freopen("output.txt","w",stdout);

#define inf 0x3f3f3f3f

#define infll 0x3f3f3f3f3f3f3f

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

typedef long long ll;

typedef pairpii;

using namespace std;

/** 單源最短路徑,dijkstra演算法,鄰接矩陣形式,複雜度為o(n^2)

* 求出源beg到所有點的最短路徑,傳入圖的頂點數,和鄰接矩陣cost

* 返回各點的最短路徑lowcost, 路徑pre.pre[i]記錄beg到i路徑上的父結點,pre[beg]=-1

* 可更改路徑權型別,但是權值必須為非負**/

const int maxn = 50 + 5;

#define typec int

bool vis[maxn];

int pre[maxn];

int cost[maxn][maxn];

int lowercost[maxn];

void dijkstra(typec cost[maxn], typec lowcost, int n, int beg)

lowcost[beg] = 0;

for(int j = 0; j < n; j++)

if(k == -1)break;

vis[k] = true;

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

if(!vis[i] && lowcost[k] + cost[k][i] < lowcost[i])

}}char mp[maxn][maxn];

int main()

}dijkstra(cost, lowercost, n, 0);

printf("%d\n", lowercost[n - 1] == inf ? -1 : lowercost[n - 1]);

}return 0;

}

51NOD 1445 變色DNA 最短路

有乙隻特別的狼,它在每個夜晚會進行變色,研究發現它可以變成n種顏色之一,將這些顏色標號為0,1,2 n 1。研究發現這只狼的基因中存在乙個變色矩陣,記為colormap,如果colormap i j y 則這只狼可以在某乙個夜晚從顏色i變成顏色j 一晚不可以變色多次 如果colormap i j n...

51nod 1445 變色DNA(最短路變形)

借鑑了大佬的部落格 一 題目鏈結 題目大意 有乙隻特別的狼,它在每個夜晚會進行變色,研究發現它可以變成n種顏色之一,將這些顏色標號為0,1,2 n 1。研究發現這只狼的基因中存在乙個變色矩陣,記為colormap,如果colormap i j y 則這只狼可以在某乙個夜晚從顏色i變成顏色j 一晚不可...

51Nod 1445 變色DNA 最短路變形)

有乙隻特別的狼,它在每個夜晚會進行變色,研究發現它可以變成n種顏色之一,將這些顏色標號為0,1,2.n 1。研究發現這只狼的基因中存在乙個變色矩陣,記為colormap,如果colormap i j y 則這只狼可以在某乙個夜晚從顏色i變成顏色j 一晚不可以變色多次 如果colormap i j n...