図の深さ優先探索(隣接テーブル)

2580 ワード

Problem Description


図の頂点数と頂点と頂点との接続関係を示し、隣接テーブルで格納された図の深さ優先探索頂点シーケンスを出力します.

Input


入力された最初の行は、整数Tで試験例の数を表し、各例の最初の行には、2個の数m(2<=m<=10)とn(1<=n<=m*(m-1)/2)があり、mは頂点の数(頂点の符号は1-m)を表し、nは辺の数を表す.次のn行の各行は1つのエッジを表す.次の行は数kであり、kは検索する頂点の数を表す.後のk行の各行には、その頂点から検索を開始する数がある.検索中に同じ頂点に隣接する頂点を、格納された順に検索します.

Output


各グループはk行を出力し、各動作は入力された頂点から探索を開始する深さ優先探索シーケンスである.各グループの検索結果は空の行で区切られます.

Sample Input

1
2 1
1 2
2
1
2

Sample Output

1 2
2 1
// :#include
#include
#include
using namespace std;
int n,m,vis[15],cnt;
vector v[15];
void dfs(int x)
{
    cnt++;
	if(cnt	if(cnt==m) printf("%d
",x); for(int i=0;i
{ if(v[x][i] && !vis[v[x][i]]) { vis[v[x][i]]=1; dfs(v[x][i]); } } } int main() { //freopen("a.txt","r",stdin);     int t,i,k,a,b,x; scanf("%d",&t);     while(t--) { scanf("%d%d",&m,&n); for(i=1;i<=m;i++)  v[i].clear(); for(i=1;i<=n;i++) { scanf("%d%d",&a,&b); v[a].push_back(b); v[b].push_back(a); } scanf("%d",&k); for(i=1;i<=k;i++) { scanf("%d",&x); memset(vis,0,sizeof(vis)); cnt=0; vis[x]=1; dfs(x); } if(t!=0) printf("
");  } return 0; }