关于图
//图的结构体
//邻接表存储:
typedef struct ArcNode{
int adjvex;//边指向结点的位置
struct ArcNode *nextarc;
}ArcNode,*Node;//边结点结构体
typedef struct{
int data;
ArcNode *firstarc;
}Vnode;//顶点结构体
typedef struct{
Vnode adjlist[maxsize];
int numver,numedg;
}AGraph;
//邻接矩阵存储
typedef struct{
char verticle[maxsize];
int Edge[maxsize][maxsize];
int numver,numedg;
}mgraph;
//头插法建立图(邻接表结构体)
AGraph *aaaa(int v,int e){
AGraph *G=new AGraph;
G->numver=v;
G->numedg =e;
for(int i=0;i<v;++i)
G->adjlist[i].firstarc=NULL;
for(int i=0;i<e;++i){
int v1,v2;
scanf("%d",&v1);
scanf("%d",&v2);
ArcNode *p=new ArcNode;
p->adjvex=v2;
p->nextarc=G->adjlist[v].firstarc;
G->adjlist[v].firstarc=p;
ArcNode *q=new ArcNode;
q->adjvex=v1;
q->nextarc=G->adjlist[v2].firstarc;
G->adjlist[v2].firstarc=q;
}
return G;
}
//
//图的广度优先遍历(BFS)
void BFS(AGraph *G,int v,int visit[]){
for(int i=0;i<G->numver;++i)
visit[i]=0;
int que[maxsize];
int front=0,rear=0;
printf("%d",v);
que[++rear]=v;
while(front!=rear){
int v=que[++front];
ArcNode *p=G->adjlist[v].firstarc;
while(p!=NULL){
if(visit[p->adjvex]==0){
printf("%d",p->adjvex)
}
p=p->nextarc;
}
}
}
//
//图的深度优先遍历(DFS)
void DFS(AGraph *G,int v,int visit[]){
visit[v]=1;
printf("%d",v);
ArcNode *p=G->adjlist[v].firstarc;
while(p!=NULL){
if(visit[p->adjvex]==0)
DFS(G,p->adjvex,visit);
p=p->nextarc;
}
}
//
//图采用邻接表存储,设计算法判断i和j结点之间是否有路径
bool DFS1(AGraph *G,int i,int j){
int k,visit[maxsize];
for(k=0;k<G->numver;++k)
visit[k]=0;
DFS(G,i,visit);
if(visit[j]==1)
return true;
else
return false;
}
//
//设计算法判断无向图是否是一棵树
void fun(AGraph *G,int v,int &vn,int &en,int visit[]){
visit[v]=1;
++vn;
ArcNode *p=G->adjlist[v].firstarc;
while(p!=NULL){
++en;
if(visit[p->adjvex]==0)
fun(G,p->adjvex.vn,en,visit);
}
}
bool GisTree(AGraph *G){
int vn=0,en=0;
int visit[maxsize];
for(int i=0;i<G->numver,++i)
visit[i]=0;
fun(G,l,vn,en,visit);
if(vn==G->numver&&(G->numver-1)==en/2)
return true;
else
return false;
}