1.首先判断无向图
方法:1首先求出每个顶点的度
2将图中顶点度<=1的顶点放入队列中
3.将队列中的点x出列,然后删除其他顶点中与x有关联的顶点的这个边,并且将度数减一;将这个顶点从adjlist线性表中删除
4.重复2
5.当队列中元素都出来后,如果adjlist不为0,就说明有环,否则没有环。
代码:
#include<iostream>
using namespace std;
typedef int VexType;
typedef struct Arcnode{
VexType data;
struct Arcnode *nextarc;
}ArcNode;
typedef struct Vexnode
{
VexType data;
ArcNode *firstarc;
}Vnode,AdjList[100];
typedef struct Graph
{
AdjList adjlist;
int vexnum;
int arcnum;
}*MGraph,Graph;
MGraph Create_Graph()
{
MGraph mygraph =new Graph;
int key;
int i;
int m;
int x,y,z;
printf("图一共有多少个顶点?\n");
scanf("%d",&x);
mygraph->vexnum=x;
printf("图一共有多少个边?\n");
scanf("%d",&y);
mygraph->arcnum=y;
printf("请输入每个顶点\n");
for(i=1;i<=mygraph->vexnum;i++)
{
scanf("%d",&z);
mygraph->adjlist[i].data=z;
}
for(i=1;i<=mygraph->vexnum;i++)
{
printf("%d有没有相关连的顶点?有输入1,没有输入0\n",mygraph->adjlist[i].data);
scanf("%d",&key);
if(key)
{
printf("请输入与%d相关联的顶点,以-123结束\n&#