4.1 无向图

无向图的API

在这里插入图片描述

常用的图处理代码

图的几种表示方法

  • 必须为可能在应用中碰到的各种类型的图预留出足够的空间;
  • Graph的实例方法实现一定要快。

一、邻接矩阵
V*V布尔矩阵,顶点v和顶点w有相连接的边时,定义v行w列的元素值为true,否则为false。

二、边的数组
使用一个Edge类,含有两个int实例变量。

三、邻接表数组
使用一个以顶点为索引的列表数组,其中每个元素都是和该顶点相邻的顶点列表。

  1. 邻接表的数据结构
    非稠密图的标准表示称为邻接表的数据结构,它将每个顶点的所有相邻顶点都保存在该顶点对应的元素所指向的一张链表中。
package algorithms;

import java.util.ArrayList;

public class Graph {
	static void addEdge(ArrayList<ArrayList<Integer>> am, int s, int d){
		am.get(s).add(d); //向每条链表中添加元素
		am.get(d).add(s); //对称
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int V = 5;
		ArrayList<ArrayList<Integer>> am = new ArrayList<ArrayList<Integer>>(V);
		for(int i = 0; i < V; i++) {
			am.add(new ArrayList<Integer>());
		}
		
		//add edges
		addEdge(am,0,1); //索引对应的元素,新增元素
		addEdge(am,0,2);
		addEdge(am,0,3);
		addEdge(am,1,2);
	    //每个顶点分别有3,2,2,1,0个元素
		printGraph(am);

	}

	static void printGraph(ArrayList<ArrayList<Integer>> am) {
		// TODO Auto-generated method stub
		for(int i = 0; i < am.size(); i++) { //遍历第0、1、2、3、4条链表
			System.out.println("\nVertex" + i + ":");
			for(int j = 0; j < am.get(i).size(); j++) {  //对于每条链表,遍历该链表所有元素
				System.out.println("->"+am.get(i).get(j));
			}
			System.out.println();
		}
		
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要一定的时间来回答。以下是我对你问题的回答: 首先,要设计一个基于DOS菜单的应用程序,我们需要使用C语言来实现。我们可以使用多级菜单来实现各种功能。具体如下: 1. 主菜单 1.1 无向图 1.2 有向图 1.3 无向网 1.4 有向网 1.5 退出程序 2. 无向图 2.1 创建无向图的邻接矩阵 2.2 创建无向图的邻接表 2.3 无向图的深度优先遍历 2.4 无向图的广度优先遍历 2.5 返回主菜单 3. 有向图 3.1 创建有向图的邻接矩阵 3.2 创建有向图的邻接表 3.3 拓扑排序 3.4 返回主菜单 4. 无向网 4.1 创建无向网的邻接矩阵 4.2 创建无向网的邻接表 4.3 求最小生成树 4.4 返回主菜单 5. 有向网 5.1 创建有向网的邻接矩阵 5.2 创建有向网的邻接表 5.3 关键路径 5.4 单源最短路径 5.5 返回主菜单 在程序中,我们可以使用switch语句和循环来实现菜单的选择和功能的实现。具体步骤如下: 1. 显示主菜单,等待用户输入。 2. 根据用户输入,进入相应的菜单。 3. 在菜单中,显示用户可以选择的操作,并等待用户输入。 4. 根据用户输入,执行相应的操作。 5. 如果用户选择了返回主菜单的选项,则返回主菜单。 6. 如果用户选择了退出程序的选项,则退出程序。 在具体实现过程中,我们需要根据具体的需求,编写相应的函数来实现各种操作。例如,创建无向图的邻接矩阵可以使用二维数组来实现,创建无向图的邻接表可以使用结构体和链表来实现。 总之,要实现一个基于DOS菜单的应用程序,需要考虑到用户的需求,并根据需求编写相应的功能函数。同时,还需要注意界面友好、易于操作、程序稳定等方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值