每组测试数据有相同的结构构成:
每组数据第一行一个整数N,2<=N<=50。
之后有N行,每行N个字符,表示狼的变色矩阵,矩阵中只有‘Y’与‘N’两种字符,第i行第j列的字符就是colormap i i j j。
3 3 NYN YNY NNN 8 NNNNNNNY NNNNYYYY YNNNNYYN NNNNNYYY YYYNNNNN YNYNYNYN NYNYNYNY YYYYYYYN 6 NYYYYN YNYYYN YYNYYN YYYNYN YYYYNN YYYYYN
1 0-1
模板题。
代码如下:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int dis[101][101]; int dis1[100001]; char a[100000]; int book[100001]; int inf=0x3f3f3f3f; int main() { int n,i,j,m,v; scanf("%d",&n); while(n--) { memset(dis1,0,sizeof(dis1)); memset(book,0,sizeof(book)); scanf("%d",&m); for(i=0;i<m;i++) { for(j=0;j<m;j++) { dis[i][j]=0x3f3f3f3f; } } for(i=0; i<m; i++) { int tot=0; scanf("%s",a); for(j=0; j<m; j++) { if(a[j]=='Y') { dis[i][j]=tot++; } } } // for(i=0;i<m;i++) // { // for(j=0;j<m;j++) // { // printf("%d ",dis[i][j]); // } // printf("\n"); // } int min1,u=0; for(i=0;i<m;i++) { dis1[i]=dis[0][i]; } for(i=0;i<m-1;i++) { min1=inf; for(j=0;j<m;j++) { if(book[j]==0&&dis1[j]<min1) { min1=dis1[j]; u=j; } } book[u]=1; for(v=0;v<m;v++) {//printf("%d\n",v); // printf("1"); if(dis[u][v]<inf) { if(dis1[v]>dis[u][v]+dis1[u]) dis1[v]=dis[u][v]+dis1[u]; } } } if(dis1[m-1]>=inf) { printf("-1\n"); } else { printf("%d\n",dis1[m-1]); } } return 0; }