import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;
public class Main{
public static Scanner cin=new Scanner(System.in);
public static final int MAX=26;
public static void main(String[] arg){
char[] p=new char[MAX];
int[] arcp=new int[MAX];
for(int i=0;i<MAX;++i) arcp[i]=-1;
int n=cin.nextInt();
String str=cin.next();
for(int i=0;i<n;++i){
p[i]=str.charAt(i);
arcp[p[i]-'A']=i;
}
boolean[][] a=new boolean[n][n];
for(int i=0;i<n;++i) for(int j=0;j<n;++j){
int tmp=cin.nextInt();
a[i][j]=tmp!=0;
}
str=cin.next();
Queue<Integer> q=new LinkedList<>();
boolean fir=true;
q.offer(arcp[str.charAt(0)-'A']);
while(!q.isEmpty()){
Integer now=q.poll();
if(p[now]==(char)-1) continue;
if(fir) fir=false;
else System.out.print(' ');
System.out.print(p[now]);
p[now]=(char)-1;
for(int i=0;i<MAX;++i){
if(arcp[i]!=-1&&p[arcp[i]]!=(char)-1&&a[now][arcp[i]]) q.offer(arcp[i]);
}
}
return;
}
}
Java实现图的广度优先搜索
最新推荐文章于 2024-07-21 22:27:18 发布