数据结构中用图的邻接矩阵的表示以及深度搜索

#include<iostream>
using namespace std;
typedef char vertextype;
typedef int edgetype;
#define maxvex 100
#define infinity 1000
int visited[100];

class MGraph{

public:
	vertextype vexs[maxvex];
	edgetype arc[maxvex][maxvex];
	int numvertexs,numedges;//图的顶点数目和图的边的数目
	MGraph(const int &v,const int &e):numvertexs(v),numedges(e){}
	void creategraph();//创建图结构
	void displaygraph();//显示图的结构
	void DFS(int i);//深度优先遍历的子函数
	void DFSTraverse();

};
void MGraph::creategraph()
{  cout<<"下面请输入顶点的元素类型值,输入的个数为"<<numvertexs<<endl;
	for(int i=0;i<numvertexs;++i)
	{
		cin>>vexs[i];
	}
	cin.clear();
	cout<<"下面请为邻接矩阵赋值,矩阵的大小为:"<<numvertexs<<"*"<<numvertexs<<endl;
	for(int i=0;i<numvertexs;++i)
	{
		for(int j=0;j<numvertexs;++j)
		{
			cin>>arc[i][j];
		}
	}

}
void MGraph::displaygraph()
{   cout<<"下面输出的是顶点中的元素"<<endl;
	for(int i=0;i<numvertexs;++i)
	{
		cout<<vexs[i]<<" ";
	}
	cout<<endl;

	for(int i=0;i<numvertexs;++i)
	{
		for(int j=0;j<numvertexs;++j)
		{
			cout<<arc[i][j]<<'\t';
		}
		cout<<endl;
	}
}
//下面定义深度优先的函数
void MGraph::DFS(int i)
{
	int j;
	visited[i]=true;
	cout<<"深度优先输出的结点信息"<<vexs[i]<<endl;
	for(j=0;j<numvertexs;++j)
	{
		if(arc[i][j]==1&&!visited[j])
			DFS(j);
	}
}
void MGraph::DFSTraverse()
{
	int i;
	for(i=0;i<numvertexs;++i)
	{
		visited[i]=0;
	}
	for(i=0;i<numvertexs;++i)
	{
		if(!visited[i])
			DFS(i);
	}
}
int main()
{    MGraph G(4,5);
    G.creategraph();
	G.displaygraph();
	G.DFSTraverse();
	system("pause");
	return 0;
}

时间: 2024-10-31 15:25:43

数据结构中用图的邻接矩阵的表示以及深度搜索的相关文章

数据结构中的7种排序算法

数据结构中的7种排序算法 排序是将一个记录的任意序列重新排列成一个按键值有序的序列. 时间复杂度主要考虑元素的移动次数. 结构如下: 1.直接插入排序 1,定义:依次将待排序序列中的每一个记录插入到一个已经排好序的序列中,直到全部记录都排好序. 2,时间复杂度:在最好情况下,待排序序列为正序,时间复杂度为O(n):最坏情况下,待排序序列为逆序,时间复杂度为O(n^2);平均情况下,时间复杂度为O(n^2). 3,空间复杂度:O(1). public static void insertSort(

数据结构中的堆栈和内存中的堆栈

内存常用的区域分类:栈区(stack).堆区(heap).全局区(static区).文字常量区.程序代码区. 栈区:由编译器自动分配和释放,遵循”后进先出“的规则.在函数调用时,第一个进栈的是主函数中的下一条指令地址,然后是函数的各个参数(大多数C编译器中,参数从右往左入栈),然后是函数的局部变量.静态变量不入栈. 堆区:一般由程序员分配和释放,若程序员不释放,程序结束时”可能“由操作系统回收.一般在堆的头部用一个字节存放堆的大小.分配方式类似链表. 数据结构中的堆栈: 栈:遵循”后进先出“规则

关于内存中栈和堆的区别(非数据结构中的堆和栈,区别)

本文转载自:http://blog.csdn.net/fenghuayoushi/article/details/6074666 ----------------------------------------------------------------------------------------------------------------------- 下面内容转自:http://www.cnblogs.com/gesenkof99/archive/2009/04/14/14356

数据结构中的堆和栈 与 内存分配中的堆区和栈区 分析

比較全面的总结了诸多版本号,知识无国界.感谢各位的辛勤劳作. 在计算机领域,堆栈是一个不容忽视的概念,我们编写的C/C++语言程序基本上都要用到.但对于非常多的初学着来说,堆栈是一个非常模糊的概念. (1) 数据结构的栈和堆 首先在数据结构上要知道堆栈,虽然我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈. 堆和栈都是一种数据项按序排列的数据结构. 栈就像装数据的桶或箱子 我们先从大家比較熟悉的栈说起吧.它是一种具有后进先出性质的数据结构,也就是说后存放的先取.先存放的后取.这就如同我们要取出

JavaScript实现数据结构中的队列和堆栈

今天在项目中要使用JavaScript实现数据结构中的队列和堆栈,这里做一下总结. 一.队列和堆栈的简单介绍 1.1.队列的基本概念 队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被取出! 如下图所示: 1.2.堆栈的基本概念 堆栈:是一种支持后进先出(LIFO)的集合,即后被插入的数据,先被取出! 如下图所示: 二. 在JavaScript中实现队列和堆栈 在JavaScript中实现队列和数组主要是通过数组,js数组中提供了以下几个方法可以让我们很方便实现队列和堆栈: sh

java实现数据结构中的环形队列

最近在看数据结构,队列在数据结构中是个重要的元素. 定义:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合. 队列主要分为普通队列和环形队列,环形队列比普通队列的使用效率更高(普通队列容易造成内存的浪费,时间效率也会降低,主要体现在队列的删除操作上) 下面用java来实现队列,仅供参考 package demo; //环形队列 public class QueueDemo { //创建队列 public QueueDemo(int num){ m_iQueueCapacity=num;

c语言实现数据结构中的链式表

以下是我用c语言实现数据结构中的链式表   #pragma once;    #ifndef _STDLIB_H    #include <stdlib.h>    #endif    #ifndef _ELEMTYPE_H    typedef int ElemType;                                                    #endif        #ifndef _SORTTYPE_H    typedef int SortType;  

[Data Structure] 数据结构中各种树

数据结构中有很多树的结构,其中包括二叉树.二叉搜索树.2-3树.红黑树等等.本文中对数据结构中常见的几种树的概念和用途进行了汇总,不求严格精准,但求简单易懂. 1. 二叉树 二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构. 二叉树的定义:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒.二叉树的第i层至多有2i-1个结点:深度为k的二叉树至多有2k-1个结点:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=

【转】数据结构中栈和堆---内存分配中栈和堆

一.数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈.堆和栈都是一种数据项按序排列的数据结构. 1)栈就像装数据的桶或箱子  我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取.这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体). 2)堆像一棵倒过来的树 而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值.通常我们