数据结构-- 图的基本操作
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
vector<int>head[1005];
int mp[1005][1005];
char name[1005];
int vis[1005];
int n,m;
void dfs(int last)
{
if(vis[last]==0) printf("%c ",name[last]),vis[last]=1;
for(int i=0;i<head[last].size();i++)
{
if(vis[head[last][i]]==0)
{
printf("%c ",name[head[last][i]]),vis[head[last][i]]=1;
dfs(head[last][i]);
}
}
}
void bfs()
{
queue<int>q;
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
if(q.empty())
{
if(vis[i]==0)
{
printf("%c ",name[i]);
vis[i]=1;
for(int j=0;j<head[i].size();j++)
if(vis[head[i][j]]==0)q.push(head[i][j]);
}
}
while(!q.empty())
{
int kk=q.front();
q.pop();
if(vis[kk]==0)
{
printf("%c ",name[kk]);
vis[kk]=1;
for(int j=0;j<head[kk].size();j++)
if(vis[head[kk][j]]==0)q.push(head[kk][j]);
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf(" %c",&name[i]);
cin>>m;
for(int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
head[b].push_back(a);
head[a].push_back(b);
mp[a][b]=c;
}
cout<<"DFS:";
dfs(0);
cout<<endl;
cout<<"BFS:";
bfs();
cout<<endl;
cout<<"edges are:"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<head[i].size();j++)
if(mp[i][head[i][j]]>0) printf("%c-%c:%d\n",name[i],name[head[i][j]],mp[i][head[i][j]]);
}
return 0;
}