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

2021-08-09 15:34:38 字數 1576 閱讀 8211

借鑑了大佬的部落格:

一:題目鏈結

題目大意:有乙隻特別的狼,它在每個夜晚會進行變色,研究發現它可以變成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.

**題目思路:**val[i][j]之間如果是『y』,說明i可以到達j,並且i到達j的距離(代價)是i那行 1到j-1 裡面『y』的數量。 這樣算出每種顏色直接的距離,再套用最短路的演算法就行了

**如下:

#include 

#include

#include

#include

#include

#include

#pragma warning(disable:4996)

using

namespace

std;

const

int max = 0x7fffffff;

char val[52][52];

int minn_cnt;

int n, num, test;

int edge[52][52];

int vist[52], minidis[52];

void init()

}for (i = 1; i <= num; i++)

}void dijkstra(int i)

}int min_value = max, min_pos = 51;

for (k = 1; k <= num; k++)

}vist[min_pos] = 1;

position = min_pos;

}}int main()}}

memset(vist, 0, sizeof(vist));

fill(minidis, minidis + 52, max);

dijkstra(1);

if (minidis[n] > 2500)

cout

<< -1

<< endl;

else

cout

<< minidis[n] << endl;

}//system("pause");

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 最短路

1445 變色dna 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 收藏關注有乙隻特別的狼,它在每個夜晚會進行變色,研究發現它可以變成n種顏色之一,將這些顏色標號為0,1,2.n 1。研究發現這只狼的基因中存在乙個變色矩陣,記為colormap,如果colorm...

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

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