测试样例
请输入图顶点个数! 6 请输入连通的两个点,以输入0 0结束! 1 2 1 3 2 4 5 6 6 3 4 3 0 0 你输入的图为: 0 1 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 请输入你的操作类型: 退出 0 图的边数 1 任何两个顶点是否相连 2 求一个顶点的度是多少 3 1 图的边数为: 6 请输入你的操作类型: 退出 0 图的边数 1 任何两个顶点是否相连 2 求一个顶点的度是多少 3 2 请输入两个顶点的位置! 1 3 顶点1与顶点3相连! 请输入你的操作类型: 退出 0 图的边数 1 任何两个顶点是否相连 2 求一个顶点的度是多少 3 2 请输入两个顶点的位置! 1 6 顶点1与顶点6不相连! 请输入你的操作类型: 退出 0 图的边数 1 任何两个顶点是否相连 2 求一个顶点的度是多少 3 3 请输入顶点: 3 顶点3的度为:3 请输入你的操作类型: 退出 0 图的边数 1 任何两个顶点是否相连 2 求一个顶点的度是多少 3 0 Press any key to continue
代码如下
#include<stdio.h>
#include<stdlib.h>
typedef struct ArcNode
  {
int adjves;
//int weight;
struct ArcNode * nextarc;
}ArcNode;
typedef struct
  {
int data;
ArcNode firstarc;
}AdjList;
typedef struct
  {
AdjList *vertices;
int vexnum, arcnum;
}ALGraph;
ALGraph alg;
 int str[100][100] = {0};
 /**////////////////////////////////////// void initail();//初始化邻接表
void insert(int i, int j);//向邻接表插入一条边
void printAlg();//打印邻接表
void DfsTraverseALG(int i);//深优遍历
 void DfsALG(int i, int *visit);/**////深优遍历主体 void printMgraph();//打印矩阵
int Arcs(int i);//求某个顶点的度
bool isArc(int, int);//某两个点是否相连
int getArcnumOfGraph();//获得图的边数
int main()
  {
int i, j, k;
scanf("%d", &(alg.vexnum));
initail();
while (1)
 {
printf("->");
scanf("%d%d", &i, &j);//按题意输入的点序号都大于0
if (i == 0 && j == 0)
 {
break;
}
insert( i, j);
}
printAlg();
printf("DfsTraverseALG:\n");
DfsTraverseALG(1);
printf("请输入你的操作类型:\n");
printf("退出 0\n");
printf("图的边数 1\n");
printf("任何两个顶点是否相连 2\n");
printf("求一个顶点的度是多少 3\n");
while (1)
 {
scanf("%d", &k);
if (k == 0)
 {
break;
}
else if (k == 1)
 {
printf("图的边数为:%d\n", getArcnumOfGraph());
}
else if (k == 2)
 {
printf("请输入两个顶点的位置!\n");
scanf("%d%d", &i, &j);
if (isArc(i - 1, j))
 {
printf("顶点%d与顶点%d相连!\n", i, j);
}
else
 {
printf("顶点%d与顶点%d不相连!\n", i, j);
}
}
else if (k == 3)
 {
printf("请输入顶点:\n");
scanf("%d", &i);
printf("顶点%d的度为:%d\n",i, Arcs(i - 1));
}
else
 {
printf("输入错误,请重新输入\n");
}
}
system("pause");
return 0;
}
void initail()
  {
int n = alg.vexnum;
alg.arcnum = 0;
int i;
alg.vertices = (AdjList*)malloc(n * sizeof(AdjList));
for (i = 0; i < n; i++)
 {
alg.vertices[i].firstarc.nextarc = NULL;
alg.vertices[i].data = i + 1;
}
}
void insert(int i, int j)
  {
i--;
j--;
ArcNode *p;
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjves = j + 1;
p->nextarc = alg.vertices[i].firstarc.nextarc;//复制邻接表顶点的邻接点
alg.vertices[i].firstarc.nextarc = p;
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjves = i + 1;
p->nextarc = alg.vertices[j].firstarc.nextarc;//复制邻接表顶点的邻接点
alg.vertices[j].firstarc.nextarc = p;
alg.arcnum++;//边数加一
}

void printAlg()
  {
int i;
ArcNode *p;
for (i = 0; i < alg.vexnum; i++)
 {
printf("%d:\t", i + 1);
p = alg.vertices[i].firstarc.nextarc;
while (p != NULL)
 {
printf("%d\t", p->adjves);
p = p->nextarc;
}
printf("\n");
}
}

 /**////////////////////////////////////////////////// void DfsTraverseALG(int i)
  {
int j, n = alg.vexnum;
int *visit = (int*)malloc(alg.vexnum * sizeof(int));
i--;
for (j = 0; j < alg.vexnum; j++)
 {
visit[j] = 0;
}
for (j = 0; j < alg.vexnum; j++)
 {
if (visit[j] == 0)
 {
DfsALG(i, visit);
}
}
printf("\n");
 printMgraph();/**///////////////////
free(visit);
}
void DfsALG(int i, int *visit)
  {
ArcNode *p;
int j;
visit[i] = 1;
printf("%d\t", alg.vertices[i].data);
p = alg.vertices[i].firstarc.nextarc;
while (p != NULL)
 {
j = p->adjves - 1;
str[i][j] = 1;
if (visit[j] == 0)
 {
DfsALG(j, visit);
}
p = p->nextarc;
}
}
void printMgraph()
  {
int i, j;
printf("Mgraph:\n");
for (i = 0; i < alg.vexnum; i++)
 {
for (j = 0; j < alg.vexnum; j++)
 {
printf("%d ", str[i][j]);
}
printf("\n");
}
}
 /**/////////////////////////////////////////////// 
int Arcs(int i)
  {
int j = 0;
ArcNode *p = alg.vertices[i].firstarc.nextarc;
while (p != NULL)
 {
j++;
p = p->nextarc;
}
return j;
}
bool isArc(int i, int j)
  {
ArcNode *p = alg.vertices[i].firstarc.nextarc;
while (p != NULL)
 {
if (p->adjves == j)
 {
return true;
}
p = p->nextarc;
}
return false;
}
int getArcnumOfGraph()
  {
return alg.arcnum;
}


|