Colorful Wolves
题意:
有一只狼可以把自己的颜色在 n n 种颜色之间切换,每次切换需要花费一天的时间,颜色编号为,给定 n×n n × n 的由 'Y' ′ Y ′ 和 'N' ′ N ′ 组成的字符矩阵 colormap c o l o r m a p , colormap[i][j]='Y' c o l o r m a p [ i ] [ j ] = ′ Y ′ 表示狼可以从颜色 i i 切换到颜色。
每一天,如果他不能改变自己的颜色,他会保持自己的颜色不变,
否则,他会变成能变成的编号最小的颜色。
第
0
0
天狼的颜色为,他想变成颜色
n−1
n
−
1
,你需要通过修改
colormap
c
o
l
o
r
m
a
p
来完成这一目标。
也就是说,你可以花费
1
1
单位代价来把某个位置的改成
'N'
′
N
′
。
求最小花费,若无法完成目标,返回
−1
−
1
。
2≤n≤50 2 ≤ n ≤ 50
思路:
最短路
因为只能变成编号最小的,就有一定的拓扑序,那么跑个最短路即可。
由于n只有50,即floryd就可以轻松切掉此题。
code:
#define N 55
int n;
char s[N][N];
int dp[N][N];
int main(){
scanf("%d",&n);
bool flag=0;
REP(i,1,n){
int cnt=0;
scanf("%s",s[i]+1);
REP(j,1,n)dp[i][j]=s[i][j]=='Y'?(cnt++):INF;
}
REP(k,1,n) REP(i,1,n) REP(j,1,n)chkmin(dp[i][j],dp[i][k]+dp[k][j]);
printf("%d\n",dp[1][n]==INF?-1:dp[1][n]);
return 0;
}