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

数据定义

复制代码
//邻接矩阵表示图
//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();
    }


}

结果打印

相关推荐
学编程就要猛2 分钟前
Spring AI Alibaba(上)
java·人工智能·spring·springaialibaba
我命由我123455 分钟前
Photoshop - Photoshop 使用魔棒工具选择单独的区域
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
stolentime8 分钟前
AT_arc182_a [ARC182A] Chmax Rush!题解
数据结构·c++·算法·动态规划
longlongzihan9 分钟前
LeetCode 189. 轮转数组:从直观模拟到最优原地算法
c++·算法·leetcode
爱喝热水的呀哈喽14 分钟前
cpp二分库函数 lambda捕获
算法
imDwAaY15 分钟前
Spring Boot的核心配置文件一览及其加载顺序
java·spring boot·后端
zhangx1234_17 分钟前
javaEE 多线程1
java·linux·服务器
keke.shengfengpolang18 分钟前
2027届统计学专业求职政策研究与产业研究:从岗位要求到材料准备的技术路径
职场和发展
鬼手点金22 分钟前
opencode-crawl4ai使用建议
java·开发语言·人工智能·python·机器学习
longlongzihan25 分钟前
LeetCode 76. 最小覆盖子串:滑动窗口算法详解
算法·leetcode·滑动窗口