有乙隻特別的狼,它在每個夜晚會進行變色,研究發現它可以變成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示例1
0-1
看了討論區的建邊方法才過,邊建好了就是乙個最短路的模板題了,不過建邊的方法沒想到。
i到j的代價是第i行1到j-1中「y」的個數,然後就是dij的模板
#include
using
namespace
std;
const
int inf = 0x3f3f3f3f;
struct node
node(int to, int len) :to(to), len(len) {}
bool
operator
<(const node&x)const
};vector
edge[55];
char mp[55][55];
int n;
int dis[55];
void init()
int main()
); }}}
dis[0] = 0;
priority_queueq;
q.push();
while (!q.empty()) }}
int ans = dis[n - 1] == inf ? -1 : dis[n - 1];
cout
<< ans << endl;
}return
0;}
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 一晚不可...
51Nod 1445 變色DNA 最短路變形)
有乙隻特別的狼,它在每個夜晚會進行變色,研究發現它可以變成n種顏色之一,將這些顏色標號為0,1,2.n 1。研究發現這只狼的基因中存在乙個變色矩陣,記為colormap,如果colormap i j y 則這只狼可以在某乙個夜晚從顏色i變成顏色j 一晚不可以變色多次 如果colormap i j n...