数据结构-图

图的存储

  • 邻接矩阵

  • 邻接表

图的遍历

  • 深度优先搜先(DFS)

    思路
    1)V:出发结点
    2)访问V的邻接点V1(V1做已经访问标记)
    3)访问V1的邻接点V2(V2做已经访问标记)
    4)直到访问到Vn结点 该结点无可访问邻接点
    5)从Vn开始原路返回 返回过程中已经访问可访问的结点
    重复1)-4)的过程
    6)知道原路返回到V结点

    map[][]//邻接矩阵
    visited[]//记录结点是否被访问

注)
连通分支数
即对每个顶点调用dfs(在先前被访问过的顶点不能再被调用)
得到连通分支数

#include<cstdio>
#include<iostream>
using namespace std;
int VNum;
int LNum;
int map[10][10]={0};//邻接矩阵
int visited[10];

void dfs(int vertex)
{
    visited[vertex]=1;
    cout<<vertex<<" ";
    for(int i=0;i<VNum;i++){
        if(map[vertex][i]&&!visited[i]) dfs(i);
    }
}
int main()
{
    cin>>VNum>>LNum;
    
    int v,l;
    for(int i=0;i<VNum;i++) visited[i]=0;
    for(int i=0;i<LNum;i++){
        cin>>v>>l;
        map[v][l]=map[l][v]=1;
    }
    //连通分支
	for(int i=0;i<VNum;i++){
		if(!visited[i]){
		    cout<<"{ ";
			dfs(i);	
			cout<<"}"<<endl;		
		}
	} 
	return 0;
}





  • 广度优先搜索(BFS)

    思路:
    队列
    1)初始顶点V1入队
    2)若队列非空 出队首元素V
    3)将V的邻接点依次入队
    4)重复2)-3)过程 直到队列为空
#include<iostream>
#include<queue>
using namespace std;

int VNum;
int LNum;
int map[10001][10001];
int visited[10001];

void bfs(int Vertex)
{
	cout<<" "<<Vertex;
	visited[Vertex]=1;
	queue<int> q;
	q.push(Vertex);
	int tmp;
	while(!q.empty()){
		tmp=q.front();
		q.pop();
		for(int i=0;i<VNum;i++){
			if(!visited[i]&&map[tmp][i]){
				cout<<" "<<i;
				q.push(i);
				visited[i]=1;
			}
		}
    }
}
int main()
{	
    int v,l;
	cin>>VNum>>LNum;
	for(int i=0;i<VNum;i++) visited[i]=0;
	for(int i=0;i<LNum;i++){
		cin>>v>>l;
		map[v][l]=map[l][v]=1;
	}
	
	//连通分支
	for(int i=0;i<VNum;i++){
		if(!visited[i]){
			cout<<"{";
			bfs(i);
			cout<<" }"<<endl;
		}
	} 
	return 0;
}

最小生成树(MST)

  • prime算法

    思路:“让一颗树长大”
    适用于:
  • kruskal算法

    思路:“将森林合成树”

最短路径

  • dijstra算法

    思路:
    适用于:单源最短路径
  • floyd算法

    思路:
    适用于:多源最短路径

实验

  • 建立图的邻接矩阵(或邻接表)存储表示,计算顶点的度(入度、出度),并实现图的深度优先或广度优先遍历。

  • 编程实现最小生成树求解的Prim算法。

  • 编程实现AOV网的拓扑排序。

  • 编程求AOE网的关键路径。

  • 编程实现单源点最短路径的Dijkstra算法。

  • 实验代码

习题

来源于PTA上的习题
PTA-06-图1 列出连通集 //dfs和bfs

06-图2 Saving James Bond - Easy Version //bfs
06-图3 六度空间 //bfs
07-图4 哈利·波特的考试 //Floyd
07-图5 Saving James Bond - Hard Version
PTA-07-图6 旅游规划 //dijkstra
PTA-08-图7 公路村村通 //prim
PTA-08-图8 How Long Does It Take //拓扑排序

weixin151云匹面粉直供微信小程序+springboot后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值