采用邻接表创建无向图G ,依次输出各顶点的度。
输入格式:
输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。 输入第二行为顶点的信息,每个顶点只能用一个字符表示。 依次输入j行,每行输入一条边依附的顶点。
输出格式:
依次输出各顶点的度,行末没有最后的空格。
输入样例:
5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE
输出样例:
2 3 3 3 3
#include<bits/stdc++.h>
using namespace std;
typedef struct ENode{/表结点
char data;
struct ENode *next;
}ENode;
typedef struct VNode{ //头结点
char data;
ENode *fistedges;
}VNode,vertex[20];
typedef struct{
vertex v;
int numNode,numedges;
} Graph;
int find(Graph G,int c) 找弧尾
{
for(int i=0;i<G.numNode;i++)
{
if(G.v[i].data==c)
return i;
}
return -1;
}
void Create(Graph G)
{
cin>>G.numNode>>G.numedges;
for(int i=0;i<G.numNode;i++)保存顶点
{
char a;
cin>>a;
G.v[i].data=a;
G.v[i].fistedges=NULL;
}
for(int i=0;i<G.numedges;i++)/保存边
{
char a,b;
cin>>a>>b;
int p=find(G,a);
int q=find(G,b);
ENode *pre=(ENode*)malloc(sizeof(ENode));
/将b接在表头a的后面///
pre=G.v[p].fistedges;
if(pre==NULL)
{
ENode *qre=(ENode*)malloc(sizeof(ENode));
qre->data=b;
qre->next=NULL;
G.v[p].fistedges=qre;
}
else
{
while(pre->next!=NULL)
{
pre=pre->next;
}
ENode *qre=(ENode*)malloc(sizeof(ENode));
qre->data=b;
qre->next=NULL;
pre->next=qre;
}
//将a接到表头b的后面///
pre=G.v[q].fistedges;
if(pre==NULL)
{
ENode *qre=(ENode*)malloc(sizeof(ENode));
qre->data=a;
qre->next=NULL;
G.v[q].fistedges=qre;
}
else
{
while(pre->next!=NULL)
{
pre=pre->next;
}
ENode *qre=(ENode*)malloc(sizeof(ENode));
qre->data=a;
qre->next=NULL;
pre->next=qre;
}
}
///输出各个顶点的度///
for(int i=0;i<G.numNode;i++)
{
int s=0;
for(ENode *p=G.v[i].fistedges;p!=NULL;p=p->next)
{
s++;
}
if(i==0)
cout<<s;
else
cout<<" "<<s;
}
}
int main()
{
Graph G;
Create(G);
return 0;
}