Colorful Wolves
题意:
有一只狼可以把自己的颜色在nn种颜色之间切换,每次切换需要花费一天的时间,颜色编号为,给定n×nn×n的由'Y'′Y′和'N'′N′组成的字符矩阵colormapcolormap,colormap[i][j]='Y'colormap[i][j]=′Y′表示狼可以从颜色ii切换到颜色。
每一天,如果他不能改变自己的颜色,他会保持自己的颜色不变,
否则,他会变成能变成的编号最小的颜色。
第00天狼的颜色为,他想变成颜色n−1n−1,你需要通过修改colormapcolormap来完成这一目标。
也就是说,你可以花费11单位代价来把某个位置的改成'N'′N′。
求最小花费,若无法完成目标,返回−1−1。
2≤n≤502≤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;
}