7-1 邻接表创建无向图
题目
采用邻接表创建无向图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
代码
(初始化和创建书上都有,大部分都是chao的书上的,自己就写了一个求每个结点的度并输出而已)
#include<bits/stdc++.h>
using namespace std;
typedef struct ArcNode //边表结点
{
int adjvex;// 邻接点域,存储该顶点对应的下标
struct ArcNode *nextarc;// 链域,指向下一个邻接点
//InfoType *info;
} ArcNode;
typedef struct VNode //顶点表结点
{
char data;//顶点域,储存该顶点信息
ArcNode *firstarc;//边表头指针
} VNode,AdjList[11];
typedef struct
{
AdjList vertices;
int vexnum,arcnum;//顶点数和边数
} ALGraph;
int Locate(ALGraph &g,char c)
{
for(int i=0; i<g.vexnum; i++)
{
if(g.vertices[i].data==c)
return i;
}
return -1;
}
int Creat(ALGraph &g)
{
int adr1,adr2;//两个输入结点 的位置
char c[11];
char c2[3];
ArcNode *a1,*a2;
scanf("%d%d",&g.vexnum,&g.arcnum);//输入顶点数和边数
scanf("%s",c);
for(int i=0; i<g.vexnum; i++)
{
g.vertices[i].data=c[i];//顶点信息及将边表初始化为空
g.vertices[i].firstarc=NULL;
}
getchar();
for(int i=0; i<g.arcnum; i++) //创建边表
{
scanf("%s",c2);
getchar();
adr1=Locate(g,c2[0]);
adr2=Locate(g,c2[1]);
a1=new ArcNode;
a1->adjvex=adr2;//临界序号为adr2
a1->nextarc=g.vertices[adr1].firstarc;//将e的指针指向当前顶点上指向的结点
g.vertices[adr1].firstarc=a1;//将当前的顶点指针指向e
a2=new ArcNode;
a2->adjvex=adr1;//临界序号为adr2
a2->nextarc=g.vertices[adr2].firstarc;//将e的指针指向当前顶点上指向的结点
g.vertices[adr2].firstarc=a2;//将当前的顶点指针指向e
}
}
void pri(ALGraph &g)//
{
// int sum[11]= {0};
// ArcNode *p;
// for(int j=0; j<g.vexnum; j++)
// {
// for(int i=0; i<g.arcnum; i++)
// {
// if(g.vertices[i].firstarc->nextarc->adjvex==g.vertices[j].firstarc->adjvex&&i!=j)
// {
// sum[j]++;
// }
// }
// }
//
//
//
// for(int i=0; i<g.vexnum; i++)
// {
// if(i==0)
// cout<<sum[0];
// else
// cout<<" "<<sum[i];
//
// }
int cut;int sum[11]={0};
ArcNode *p=NULL;
for(int i=0;i<g.vexnum;i++)
{
cut=0;
p=g.vertices[i].firstarc;
while(p!=NULL)
{
cut++;
p=p->nextarc;
}
sum[i]=cut;
}
for(int i=0;i<g.vexnum;i++)
{
if(i==0)cout<<sum[0];
else
cout<<" "<<sum[i];
}
}
int main()
{
ALGraph g;
Creat(g);
pri(g);
}