图的基本操作

本文回顾了数据结构中的图操作,包括创建图、显示基本信息、节点度数、拓扑排序、深度优先搜索、广度优先搜索、邻接矩阵、最小生成树及最短路径算法,通过代码实现加深理解。
摘要由CSDN通过智能技术生成

最近复习了下数据结构,把一下比较重要的算法敲了一遍,收获颇多。

图的基本操作:

1.创建一个图

2.显示图的基本信息.

3.显示所有节点的度

4.显示拓扑序列

5.深度优先搜索

6.广度优先搜索

7.用邻接矩阵创建图

8.输出最小生成树

9.输出顶点V到其他顶点的最短路径

10.弗洛伊德最短路径算法


代码如下:

#include<stdio.h>
#include<stdlib.h>

#define MAX_VERTEX_NUM 20
#define INF  100

typedef struct  ArcNode{         //弧信息
	
	int adjvex;			         //该弧所指向顶点的位置		
	struct ArcNode * nextarc;       //下一条弧的指针
	int weight;				     //权值
}ArcNode,*LinkList;


typedef  struct VNode{               //节点信息
	int data,in,out;                        //顶点信息,入度与出度
	ArcNode * firstarc;              //该顶点指向第一条弧的指针					 
}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct Graph{
	AdjList    vertices;				//顶点数组	
	int arcnum,vexnum;				//弧和顶点的个数
	int kind;                      //图的类型
}Graph;

typedef struct MGraph{                  //临接矩阵
	
	int arces[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
	int arcnum,vexnum;
	int kind;

}MGraph;

int visit[MAX_VERTEX_NUM];

void CreateGraph(Graph *g);           
void CreateDG(Graph *g);              //创建有向图
void CreateUDG(Graph *g);			  //创建无向图
ArcNode * Create();
void CreateMGraph(MGraph *g);          //用邻接矩阵创建图

void GraphDegree(Graph *g);            //输出每个顶点的度
void GraphTopu(Graph *g);				//输出图的拓扑序列
void DFS(Graph *g,int v);						//深度优先搜索
void BFS(Graph *g);						//广度优先搜索

void ShowGraph(Graph *g);
void ShowMGraph(MGraph *g);

void CreateMenu();


void MinPrimTree(MGraph * g,int v);      //prim最小生成树
void MinPath(MGraph * g,int v);			//dijsktra最短路径
void Floyd(MGraph * g);					//弗洛伊德


void main()
{

	int select=1;
	char ch;

	Graph g;
	MGraph mg;

	while(select)
	{
		system("cls");
		CreateMenu();

		scanf("%d",&select);

		switch (select)
		{
		case 0:
			exit(1);
			break;
		case 1:
			CreateGraph(&g);
			break;
		case 2:
			ShowGraph(&g);
			break;
		case 3:
			GraphDegree(&g);
			break;
		case 4:
			GraphTopu(&g);
			break;
		case 5:
			printf("深度优先搜索序列如下:\n");
			DFS(&g,0);
			break;
		case 6:
			BFS(&g);
			break;
		case 7:
			CreateMGraph(&mg);
		//	ShowMGraph(&mg);
			break;
		case 8:
			MinPrimTree(&mg,3);
			break;
		case 9:
			MinPath(&mg,0);
			break;
		case 10:
			Floyd(&mg);
			break;
		}

		if(select == 1 || select == 2||select == 3||select == 4||select == 5||select == 6
											||select == 7||select == 8||select == 9 ||select == 10)
		{	
			printf("按回车键继续!");
			scanf("%c%*c",&ch);    
  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值