算法-数据结构-图的构建(邻接矩阵表示)

news/2025/2/26 3:25:21

数据定义


//邻接矩阵表示图
//1.无向图是对称的
//2.有权的把a,到b 对应的位置换成权的值

/**
 * 无向图
 *    A  B
 * A  0  1
 * B  1  0
 */
/**
 * 有向图
 *    A  B
 * A  0  1
 * B  0  0
 */

import java.util.ArrayList;
import java.util.List;

/**
 * 带权图
 *    A  B
 * A  0  1
 * B  0  0
 */
public class GraphM {
    GraphM(List<Character> vList, int [][] gArr){
        v=vList;
        //构造时候顶点个数代表邻接矩阵的长度
        //邻接矩阵存储边是否联通和权
        g=gArr;
    }
    //顶点
    private List<Character> v=new ArrayList<>();
    //边
    private int[][] g;

    public List<Character> getV() {
        return v;
    }

    public int[][] getG() {
        return g;
    }
}

图的创建



import org.springframework.integration.graph.Graph;

import java.util.ArrayList;
import java.util.List;

public class GraphTest {
    //创造一个无向图 边长为6 都联通
    //顶点为6

    public static void wuXiangGraphCreat()
    {
        List<Character> v1=new ArrayList<>();
        for(int i=0;i<6;i++)
        {
            v1.add((char)('A'+i));
        }
        int [][] g1=new int[v1.size()][v1.size()];
        for(int i=0;i<v1.size();i++)
        {
            for(int j=0;j<v1.size();j++)
            {
                if(i!=j)
                {
                    //不是对称轴上都是1
                    g1[i][j]=1;
                }else {
                    //对称轴都是0
                    g1[i][j]=0;
                }
            }
        }
        GraphM wuXiangGraph=new GraphM(v1,g1);
        //打印校验
        //顶点
        System.out.println(wuXiangGraph.getV());
        //边
        for(int i= 0;i<v1.size();i++)
        {
            for(int j=0;j<v1.size();j++)
            {
                System.out.print(wuXiangGraph.getG()[i][j]);
                System.out.print(" ");
            }
            System.out.println();
        }
    }
    //有向图
    //创造一个有向图 边长为6 A-B B-C C-D D_E E-F
    //顶点为6
    public static void youXiangGraphCreat()
    {
        List<Character> v1=new ArrayList<>();
        for(int i=0;i<6;i++)
        {
            v1.add((char)('A'+i));
        }
        int [][] g1=new int[v1.size()][v1.size()];

        for(int i=0;i<v1.size();i++)
        {
            for(int j=0;j<v1.size();j++)
            {
                if(i==0&&j==1||i==1&&j==2||i==2&&j==3|| i==3&&j==4||i==4&&j==5||
                i==5&&j==0)
                {
                    //边长为6 A-B B-C C-D D_E E-F
                    g1[i][j]=1;
                }else {
                    //其余都是0
                    g1[i][j]=0;
                }
            }
        }
        GraphM wuXiangGraph=new GraphM(v1,g1);
        //打印校验
        //顶点
        System.out.println(wuXiangGraph.getV());
        //边
        for(int i= 0;i<v1.size();i++)
        {
            for(int j=0;j<v1.size();j++)
            {
                System.out.print(wuXiangGraph.getG()[i][j]);
                System.out.print(" ");
            }
            System.out.println();
        }
    }
    //有向图带权,权每到下一条边加10
    //创造一个有向图 边长为6 A-B B-C C-D D_E E-F
    public static void youXiangGraphQuCreat()
    {
        List<Character> v1=new ArrayList<>();
        for(int i=0;i<6;i++)
        {
            v1.add((char)('A'+i));
        }
        int [][] g1=new int[v1.size()][v1.size()];
        //权
        int tem=0;
        for(int i=0;i<v1.size();i++)
        {
            for(int j=0;j<v1.size();j++)
            {
                if(i==0&&j==1||i==1&&j==2||i==2&&j==3|| i==3&&j==4||i==4&&j==5||
                        i==5&&j==0)
                {
                    //边长为6 A-B B-C C-D D_E E-F
                    g1[i][j]=1+tem;
                    tem+=10;
                }else {
                    //其余都是0
                    g1[i][j]=0;
                }
            }
        }
        GraphM wuXiangGraph=new GraphM(v1,g1);
        //打印校验
        //顶点
        System.out.println(wuXiangGraph.getV());
        //边
        for(int i= 0;i<v1.size();i++)
        {
            for(int j=0;j<v1.size();j++)
            {
                System.out.print(wuXiangGraph.getG()[i][j]);
                System.out.print(" ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        //无向图
        wuXiangGraphCreat();
        youXiangGraphCreat();
        youXiangGraphQuCreat();
    }


}

结果打印


http://www.niftyadmin.cn/n/5867124.html

相关文章

Android NDK基本开发流程

Android NDK&#xff08;Native Development Kit&#xff09;开发流程允许开发者使用C/C代码来开发Android应用的部分功能&#xff0c;通常用于性能敏感的场景&#xff0c;如游戏、图像处理等。以下是Android NDK开发的基本流程&#xff1a; 1. 环境准备 安装Android Studio&a…

LabVIEW不规则正弦波波峰波谷检测

在处理不规则正弦波信号时&#xff0c;准确检测波峰和波谷是分析和处理信号的关键任务。特别是在实验数据、传感器信号或其他非理想波形中&#xff0c;波峰和波谷的位置可以提供有价值的信息。然而&#xff0c;由于噪声干扰、信号畸变以及不规则性&#xff0c;波峰波谷的检测变…

Docker 搭建 Redis 数据库

Docker 搭建 Redis 数据库 前言一、准备工作二、创建 Redis 容器的目录结构三、启动 Redis 容器1. 通过 redis.conf 配置文件设置密码2. 通过 Docker 命令中的 requirepass 参数设置密码 四、Host 网络模式与 Port 映射模式五、检查 Redis 容器状态六、访问 Redis 服务总结 前言…

使用 AndroidNativeEmu 调用 JNI 函数

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ AndroidNativeEmu AndroidNativeEmu 专为 Android 原生代码调试和模拟设计&#xff0c;特别关注 JNI 调用和 Android 环境。相比之下&#xff0c;Unicorn 是通…

Flask应用实战经验总结:使用工厂函数创建app与uWSGI服务部署启动失败解决方案

在 Flask 应用开发中&#xff0c;使用工厂函数创建应用实例&#xff0c;并借助 uWSGI 服务进行部署&#xff0c;是常见且高效的组合。 然而&#xff0c;在实际操作过程中&#xff0c;uWSGI 配置文件与应用启动函数之间的关系复杂&#xff0c;容易引发各种问题。 本文将详细探…

算法系列之搜素算法-二分查找

在算法中&#xff0c;查找算法是处理数据集合的基础操作之一。二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于有序数组或列表。本文将介绍二分查找的基本原理、Java实现。 二分查找介绍 二分查找是一种在有序数组中查找特定元素的算法…

《一起打怪兽吧》——自制一款Python小游戏

《一起消灭怪兽吧》——在深夜的屏幕前&#xff0c;你是指引光明的勇者。键盘化作利剑&#xff0c;用方向键在像素战场游走&#xff0c;发射吧&#xff0c;每次击杀都有代码绽放的烟火。这款由Python与Pygame铸就的小游戏&#xff0c;让0与1的世界生长出童真的浪漫。 文章目录…

Open WebUI 是什么

Open WebUI 是什么 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台,旨在完全离线运行。它支持各种 LLM 运行器,如 Ollama 和 OpenAI 兼容的 API,并内置了 RAG 推理引擎,使其成为强大的 AI 部署解决方案。 https://github.com/open-webui/open-webui 🚀 …