#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define M 205
using namespace std;
char Dict[M][15];
int List[M][M],N;
int BFS(int,int);
int FindID(char[]);
bool IsAdj(char[],char[]);
int main()
{
int t,i,j,k,x,y,steps;
char word[30],X[15],Y[15];
//freopen("in.txt","r",stdin);
scanf("%d\n\n",&t);
while(t--)
{
N=0;memset(List,0,sizeof(List));
while(gets(Dict[N])&&strcmp(Dict[N],"*"))N++;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(IsAdj(Dict[i],Dict[j]))
List[i][j]=List[j][i]=1;
while(gets(word))
{
for(k=0;word[k];k++);
if(!k)break;
sscanf(word,"%s%s",X,Y);
x=FindID(X);
y=FindID(Y);
steps=BFS(x,y);
printf("%s %s %d\n",X,Y,steps);
}
if(t)printf("\n");
}
return 0;
}
int FindID(char word[])
{
for(int i=0;i<N;i++)
if(!strcmp(Dict[i],word))
return i;
return -1;
}
bool IsAdj(char X[],char Y[])
{
int x,y,i;
for(x=0;X[x];x++);
for(y=0;Y[y];y++);
if(x!=y)return false;
x=0;
for(i=0;i<y;i++)
if(X[i]!=Y[i])x++;
if(x>1)return false;
return true;
}
int BFS(int x,int y)
{
int i,h;
int color[M],d[M];
queue<int>Q;
memset(color,0,sizeof(color));
color[x]=1,d[x]=0;
Q.push(x);
while(!Q.empty())
{
h=Q.front();
Q.pop();
for(i=0;i<N;i++)
{
if(List[h][i]&&color[i]==0)
{
color[i]=1;
d[i]=d[h]+1;
if(i==y)break;
Q.push(i);
}
}
if(i==y)break;
}
return d[y];
}
#include<cstring>
#include<cstdio>
#include<queue>
#define M 205
using namespace std;
char Dict[M][15];
int List[M][M],N;
int BFS(int,int);
int FindID(char[]);
bool IsAdj(char[],char[]);
int main()
{
int t,i,j,k,x,y,steps;
char word[30],X[15],Y[15];
//freopen("in.txt","r",stdin);
scanf("%d\n\n",&t);
while(t--)
{
N=0;memset(List,0,sizeof(List));
while(gets(Dict[N])&&strcmp(Dict[N],"*"))N++;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(IsAdj(Dict[i],Dict[j]))
List[i][j]=List[j][i]=1;
while(gets(word))
{
for(k=0;word[k];k++);
if(!k)break;
sscanf(word,"%s%s",X,Y);
x=FindID(X);
y=FindID(Y);
steps=BFS(x,y);
printf("%s %s %d\n",X,Y,steps);
}
if(t)printf("\n");
}
return 0;
}
int FindID(char word[])
{
for(int i=0;i<N;i++)
if(!strcmp(Dict[i],word))
return i;
return -1;
}
bool IsAdj(char X[],char Y[])
{
int x,y,i;
for(x=0;X[x];x++);
for(y=0;Y[y];y++);
if(x!=y)return false;
x=0;
for(i=0;i<y;i++)
if(X[i]!=Y[i])x++;
if(x>1)return false;
return true;
}
int BFS(int x,int y)
{
int i,h;
int color[M],d[M];
queue<int>Q;
memset(color,0,sizeof(color));
color[x]=1,d[x]=0;
Q.push(x);
while(!Q.empty())
{
h=Q.front();
Q.pop();
for(i=0;i<N;i++)
{
if(List[h][i]&&color[i]==0)
{
color[i]=1;
d[i]=d[h]+1;
if(i==y)break;
Q.push(i);
}
}
if(i==y)break;
}
return d[y];
}
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.