【数据结构】图结构操作示例

#include<iostream>
#include<cstring>
#include<queue>
#include<stack>
#include<cstdio>

#define MAXNUM 20
#define MAXVALUE 65535
using namespace std;

typedef struct{
	//char vertex[MAXNUM][MAXNUM];
	char vertex[MAXNUM][MAXNUM];
	int GType;
	int vertexNum;
	int edgeNum;
	int edgeWeight[MAXNUM][MAXNUM];
	int travel[MAXNUM];
}GraphMatrix;

void CreatGraph(GraphMatrix *GM){  //创建邻接矩阵
	int i,j,k;
	int weight;
	char Estart, Eend;
	cout<<"输入图中各顶点信息\n";
	for(i=0 ; i<GM->vertexNum; i++){
		getchar();
		cout<<"第"<<i+1<<"个顶点:";
		cin>>GM->vertex[i];
	}
	cout<<"输入构成个边的顶点以及权值:\n";
	for(k=0; k<GM->edgeNum; k++){
		getchar();
		cout<<"第"<<k+1<<"条边:";
		cin>>Estart>>Eend>>weight;
		for(i=0; &Estart!=GM->vertex[i]; i++);  //在已有的顶点中查找实点
		for(j=0; &Eend!=GM->vertex[j]; j++);    //在已有的顶点中查找终点
		GM->edgeWeight[i][j]= weight;
		if(GM->GType==0){
			GM->edgeWeight[i][j]=weight;
		}
	}
}

void ClearGraph(GraphMatrix * GM){
	int i,j;
	for(i=0; i<GM->vertexNum; i++){
		for(j=0; j<GM->vertexNum; j++){
			GM->edgeWeight[i][j]==MAXVALUE;
		}
	}
}

void OutGraph(GraphMatrix * GM){
	int i,j ;
	for(j=0 ; j<GM->vertexNum; j++){
		cout<<GM->vertex[j];
	}
	cout<<"\n";
	for(i=0 ; i<GM->vertexNum; i++){
		cout<<GM->vertex[i];
		for(j=0; j<GM->vertexNum; j++){
			if(GM->edgeWeight[i][j]==MAXVALUE){
				cout<<"\tZ";
			}
			else{
				cout<<GM->edgeWeight[i][j];
			}
		}
		cout<<"\n";
	}
}

void DeepTraOne(GraphMatrix * GM  , int n){
	int i;
	GM->travel[n]=1;
	cout<<GM->vertex[n];
	for(i=0; i<GM->vertexNum; i++){
		if(GM->edgeWeight[n][i]!=MAXVALUE&&!GM->travel[n]){
			DeepTraOne(GM,i);
		}
	}
}

void DeepTraGraph(GraphMatrix * GM){
	int i ;
	for(i=0; i<GM->vertexNum; i++){
		GM->travel[i]=0;
	}
	cout<<"深度优先遍历结点:";
	for(i=0; i<GM->vertexNum; i++){
		if(!GM->travel[i]){
			DeepTraOne(GM, i);
		}
	}
	cout<<endl;
}

int main(){
	GraphMatrix GM;
	cout<<"输入生成图的类型: ";
	cin>>GM.GType;
	cout<<"输入图的顶点数量:";
	cin>>GM.vertexNum;
	cout<<"输入图的边数量: ";
	cin>>GM.edgeNum;
	ClearGraph(&GM);
	CreatGraph(&GM);
	cout<<"该图的邻接矩阵如下:\n";
	OutGraph(&GM);
	DeepTraGraph(&GM);
	return 0;
}

  

时间: 2024-10-25 20:08:04

【数据结构】图结构操作示例的相关文章

C# 图结构操作

仿造<<Java常用算法手册>>里面对的算法,使用C#实现了一遍. 理论知识我就不讲解了,在这本书里面已经写的非常完美! 代码如何下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 图结构 { public class GraphMatrix { public static in

实用数据结构---图的操作和算法

图算法的源代码.包含大量的注释,和最小生成树.最短路径.邻接表图深度广度优先搜索,邻接矩阵图深度广度优先搜索,欢迎借鉴 #include<stdio.h> #include<stdlib.h> #define MAXVEX 20 #define INFINITY 65535 typedef char vertexType; typedef int edgeType; typedef int Boolean; typedef int Pathmatirx[MAXVEX]; //用于存

数据结构 - 图的存储结构表示及其遍历 (DFS &amp;&amp; BFS)

1.邻接矩阵表示的图结构 /* 邻接矩阵表示的图结构 */ #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <queue> #include <stack> using namespace std; typedef char VertexType; //顶点类型应由用户定义 typedef int EdgeType; /

C#与数据结构--图的遍历

C#与数据结构--图的遍历 8.2 图的存储结构 图 的存储结构除了要存储图中各个顶点的本身的信息外,同时还要存储顶点与顶点之间的所有关系(边的信息),因此,图的结构比较复杂,很难以数据元素在存储区 中的物理位置来表示元素之间的关系,但也正是由于其任意的特性,故物理表示方法很多.常用的图的存储结构有邻接矩阵.邻接表.十字链表和邻接多重表. 8.2.1  邻接矩阵表示法 对于一个具有n个顶点的图,可以使用n*n的矩阵(二维数组)来表示它们间的邻接关系.图8.10和图8.11中,矩阵A(i,j)=1

数据模型所描述的内容包括三个部分:数据结构、数据操作、数据约束。

http://www.cnblogs.com/joechinochl/articles/5252518.html 1)数据结构:数据模型中的数据结构主要描述数据的类型.内容.性质以及数据间的联系等.数据结构是数据模型的基础,数据操作和约束都建立在数据结构上.不同的数据结构具有不同的操作和约束. 2)数据操作:数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式. 3)数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法.词义联系.他们之间的制约和依存关系,以及数据动态变化的规

[数据结构]图,邻接多重表,十字链表

十字链表 你会发现,要表示一个有向图,因为有 出度 和 入度 ,需要两个邻接表:邻接表和逆邻接表. 其实我们可以把这两个表整合在一起,也就是十字链表(Orthogonal List). 我们依然需要构造一种结构体A,用结构体A的数组来存放所有顶点-我们其实可以把它叫做 顶点表. 我们构造的结构体A如下: data firstin firstout 构造结构体B,用结构体B来记录与这个顶点 用边邻接的 顶点的相关信息,我们把它叫做 边表. tailvex headvex headlink tail

大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配

第十一章 数据结构(下)-集合操作11.1 集合元素的映射-map11.1.1 map 映射函数的操作11.1.2 高阶函数基本使用案例1+案例211.1.3 使用 map 映射函数来解决11.1.4 模拟实现 map 映射函数的机制11.1.5 课堂练习11.2 集合元素的扁平-flatMap11.3 集合元素的过滤-filter11.4 集合元素的化简-reduce11.5 集合元素的折叠-fold11.6 集合元素的扫描-scan11.7 集合的综合应用案例11.8 集合的合并-zip11

[从今天开始修炼数据结构]图

我们之前介绍了线性关系的线性表,层次关系的树形结构,下面我们来介绍结点之间关系任意的结构,图.一.相关概念 1,图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 2,各种图定义 若两顶点之间的边没有方向,则称这条边为无向边Edge,用无序偶对(v1,v2)来表示.如果图中任意两个顶点之间的边都是无向边,则称该图为无向图. 若从顶点v1到v2的边有方向,则称这条边为有向边,也称为弧(Arc),表示为有序偶<v1,

JavaScript实现图结构

JavaScript实现图结构 一.图论 1.1.图的简介 什么是图? 图结构是一种与树结构有些相似的数据结构: 图论是数学的一个分支,并且,在数学中,树是图的一种: 图论以图为研究对象,研究顶点和边组成的图形的数学理论和方法: 主要的研究目的为:事物之间的联系,顶点代表事物,边代表两个事物间的关系: 图的特点: 一组顶点:通常用 V (Vertex)表示顶点的集合: 一组边:通常用 E (Edge)表示边的集合: 边是顶点和顶点之间的连线: 边可以是有向的,也可以是无向的.比如A----B表示