⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graph.cpp

📁 自己写的一个图的建立程序
💻 CPP
字号:
#include<iostream.h>
#include<stdio.h>
#include<malloc.h>
#define MAX_VERTEX_NUM 20
#define INT_MAX 
typedef struct ArcNode{
	int adjvex;int inf;
	struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{
	char data;
	ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct ALGraph{
	AdjList vertices;
	int vexnum,arcnum;
}ALGraph;
int visited[MAX_VERTEX_NUM];

int LocateVex(ALGraph G,char u)
{int i;
for(i=0;i<G.vexnum;i++){
	if(u==G.vertices[i].data)return i;
	if(i==G.vexnum){
		printf("Error\n");}
	
}return -1;
}


void createALGraph_AdjList(ALGraph &G)
{int i,j,k,w;char v1,v2;ArcNode *p;
 cout<<"请输入顶点数和边数如:8 9"<<endl;
 
 scanf("%d %d",&G.vexnum,&G.arcnum);
 cout<<"请输入顶点如"<<":"<<"abcdefgh"<<endl;
 for(i=0;i<G.vexnum;i++){
	 cin>>G.vertices[i].data;
	 G.vertices[i].firstarc=NULL;}

 cout<<"请输入边结点如:ab bd dh..."<<endl;
 for(k=0;k<G.arcnum;k++){
	 cin>>v1;cin>>v2;
	 i=LocateVex(G,v1);j=LocateVex(G,v2);
	 p=(ArcNode *)malloc(sizeof(ArcNode));
	 p->adjvex=j;
	 p->nextarc=G.vertices[i].firstarc;
	 G.vertices[i].firstarc=p;
	 p=(ArcNode *)malloc(sizeof(ArcNode));
	 p->adjvex=i;
	 p->nextarc=G.vertices[j].firstarc;
	 G.vertices[j].firstarc=p;}
 cout<<"顶点的邻接表如下:adjvex,data"<<endl;
 for(i=0;i<G.vexnum;i++){
	 p=G.vertices[i].firstarc;cout<<i<<","<<G.vertices[i].data<<",";
	 while(p){
		 cout<<p->adjvex<<","<<G.vertices[p->adjvex].data<<",";
		 p=p->nextarc;}
	 cout<<endl;}
 return;
}

void DFS(ALGraph G,int v)
{ArcNode *p;
 printf("%5c",G.vertices[v].data);
 visited[v]=1;
 p=G.vertices[v].firstarc;
 while(p){
	 if(!visited[p->adjvex])DFS(G,p->adjvex);
	 p=p->nextarc;}
}

void DFSTraverse(ALGraph G)
{int v;
 for(v=0;v<G.vexnum;v++)visited[v]=0;
 cout<<"深度遍历序列:"<<endl;
 for(v=0;v<G.vexnum;v++){
	if(!visited[v])DFS(G,v);
}
}
void main(void)
{ALGraph G;
 createALGraph_AdjList(G);DFSTraverse(G);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -