corresponds 相当于
adjacent 相邻的
贴三份答案:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 7, M = 5e4 + 7;
vector<int> T[11];
void dfs(int u) {
queue<int> q;
q.push(u);
bool f = 0;
while(q.size() != 0) {
int t = q.front();
q.pop();
if(!T[t].size()) {
if(!f) {
cout << t;
f = 1;
}
else
cout << " " << t;
}
for (int j = 0; j < T[t].size(); j ++) {
q.push(T[t][j]);
}
}
return;
}
int main() {
int n, t, sum;
cin >> n;
sum = n * (n - 1) / 2;
string str;
getchar();
for (int i = 0; i < n; i ++) {
getline(cin, str);
if(str[0] != '-') {
t = str[0] - '0';
T[i].push_back(t);
sum -= t;
}
if(str[2] != '-') {
t = str[2] - '0';
T[i].push_back(t);
sum -= t;
}
}
dfs(sum);
return 0;
}
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
char a[15][3];
int vis[11] = {0},b[30];
int main()
{
int t;
cin>>t;
for(int i = 0;i<t;i++)
{
cin>>a[i][0]>>a[i][1];
if(a[i][0]!='-') vis[a[i][0]-'0']++;
if(a[i][1]!='-') vis[a[i][1]-'0']++;
}
queue<int>s;
for(int i = 0;i<t;i++)
{
if(vis[i]==0)
{
s.push(i);
break;
}
}
int v,t1 = 0;
while(!s.empty())
{
v = s.front();
s.pop();
b[t1++] = v;
if(a[v][0]!='-')
{
s.push(a[v][0]-'0');
}
if(a[v][1]!='-')
{
s.push(a[v][1]-'0');
}
}
int j = 0;
for(int i = 0;i<t1;i++)
{
if(a[b[i]][0]=='-'&&a[b[i]][1]=='-')
{
if(j!=0) printf(" ");
printf("%d",b[i]);
j++;
}
}
return 0;
}
#include <iostream>
#include <queue>
using namespace std;
typedef struct TNode{
int L;
int R;
}Node;
int main() {
int n;
Node T[10];
int root[10]={0};
queue<int> tq;
scanf("%d",&n);
getchar();
for (int i=0; i<n; i++) {
char l,r;
scanf("%c %c",&l,&r);
if(l=='-')
T[i].L=-1;
else{
T[i].L=l-'0';
root[T[i].L]=1;
}
if(r=='-')
T[i].R=-1;
else{
T[i].R=r-'0';
root[T[i].R]=1;
}
getchar();
}
int rt=0;
for(int i=0;i<n;i++){
if(!root[i])
rt=i;
}
tq.push(rt);
while (!tq.empty()) {
int tmp=tq.front();
if (T[tmp].L!=-1) {
tq.push(T[tmp].L);
}
if (T[tmp].R!=-1) {
tq.push(T[tmp].R);
}
tq.pop();
if(T[tmp].L==-1&&T[tmp].R==-1){
printf("%d",tmp);
if(!tq.empty()){
printf(" ");
}
}
}
return 0;
}