Java实现无向邻接矩阵的创建与深度优先遍历(DFS)

import java.util.Scanner;
public class Adjacency_Matrix {
    public static void main(String args[]){
        print_struct ps=new print_struct();
        struct G=new struct();
        method m=new method();
        ps.print_DFS(m.CreateMGraph(G));
        //struct G1;
        //G1=m.CreateMGraph(G);
        //System.out.print("\n");
        //m.Print(G1);
    }
}

class struct{
    int nodeNumber;
    int edgeNumber;
    int infinity=0;
    int maxvex=100;
    String[] vexs=new String[5];
    int arcs[][]=new int[5][5];

}

class print_struct{
    boolean[] visited_nodes=new boolean[5];
    public void DFS(struct G,int i){
        int j;
        visited_nodes[i]=true;
        System.out.println(G.vexs[i]);
        for (j=0;j<G.vexs.length;j++){
            if (G.arcs[i][j]!=0 && visited_nodes[j]==false){
                DFS(G,j);
            }
        }
    }
    public void print_DFS(struct G){
        int i;
        for (i=0;i<G.vexs.length;i++){
            visited_nodes[i]=false;
        }
        System.out.println("深度遍历标记初始化完成");
        int j;
        for (j=0;j<G.vexs.length;j++){
            if (!visited_nodes[j]){
                DFS(G,j);
            }
        }
    }
}
class method{
    public struct CreateMGraph(struct G){
        int i,j,k,w;
        System.out.println("请输入顶点数与边数:");
        Scanner sc=new Scanner(System.in);
        G.nodeNumber=sc.nextInt();
        Scanner sc2=new Scanner(System.in);
        G.edgeNumber=sc2.nextInt();
        System.out.println("顶点数与边数存储完毕");
        for (i=0;i<G.nodeNumber;i++){
            System.out.println("请输入顶点信息:");
            Scanner sc3=new Scanner(System.in);
            G.vexs[i]=sc3.next();
        }
        System.out.println("顶点信息存储完毕");
        for (i=0;i<G.nodeNumber;i++){
            for (j=0;j<G.nodeNumber;j++){
                G.arcs[i][j]=G.infinity;
            }
        }
        System.out.println("结点关联性初始化完成");
        for (k=0;k<G.edgeNumber;k++) {
            System.out.println("请输入矩阵坐标(vi,vj)与边权值(w):");
            Scanner sc4 = new Scanner(System.in);
            i = sc4.nextInt();
            Scanner sc5=new Scanner(System.in);
            j = sc5.nextInt();
            Scanner sc6=new Scanner(System.in);
            w = sc6.nextInt();

            G.arcs[i][j] = w;
            G.arcs[j][i] = G.arcs[i][j];
            System.out.println("本轮权值为" + G.arcs[i][j]);
        }
        System.out.println("无向图构造完毕");
        for (i=0;i<G.nodeNumber;i++){
            for (j=0;j<G.nodeNumber;j++) {
                System.out.print("   "+G.arcs[i][j]);
            }
            System.out.print("\n");
        }
        return G;

    }

    public void Print(struct G){
        int i;
        int j;
        for (i=0;i<G.nodeNumber;i++){
            for (j=0;j<G.nodeNumber;j++) {
                System.out.print(G.arcs[i][j]);
            }
            System.out.print("\n");
        }
    }



}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值