图结构以及它的一些基本操作:
/**
*
*/
package 图;
import java.util.Scanner;
/**
* @author Brighten_Yim
*
*/
class GraphMatrix{//邻接矩阵
static final int Maxnum = 20;//最大点数
static final int Maxvalue = 65335;//无路径时的权值
char[] V = new char[Maxnum] ;//点
int[][] E = new int[Maxnum][Maxnum];//权值
int type ;//类型 0表示 无向图 1 表示 有向;
int V_num;//点 数
int E_num;//边数
int[] isTraw = new int[Maxnum];//记录遍历
}
public class Graph {
static Scanner input = new Scanner(System.in);
static void createGraph(GraphMatrix GM){//创建图
int i,j,k;
int weight;//权值
char From,To;
System.out.println("输入图的类型,0表示无向图,1表示有向图。");
GM.type = input.nextInt();
System.out.println("输入构成图的各个点:");
for(i = 0;i < GM.V_num ;i++){
System.out.printf("第%d个点为:",i+1);
GM.V[i] = (input.next().toCharArray())[0];
}
System.out.println("输入每条边的顶点以及权值:");
for(j = 0;j<GM.E_num;j++){
System.out.printf("第%d条边:",j+1);
From = (input.next().toCharArray())[0];
To = (input.next().toCharArray())[0];
weight = input.nextInt();
for(i = 0;From!=GM.V[i];i++);
for(k =0;To!=GM.V[k];k++);
GM.E[i][j] = weight;
if(GM.type==0){
GM.E[j][i] = GM.E[i][j];
}
}
}
static void clearGraph(GraphMatrix GM){//清空图
for(int i= 0; i<GM.V_num;i++)
for(int j = 0;j<GM.V_num;j++){
GM.E[i][j] = GM.Maxvalue; //将两个节点之间的 权值设置为 无路径时的权值,清空图;
}
}
static void DeepTraOne(GraphMatrix GM, int n){//从n节点开始深度遍历
int i;
GM.isTraw[n] = 1;//设置为 1 表示已经历遍过该节点。
System.out.printf("->%c",GM.V[n]);
for(i = 0; i<GM.V_num;i++){
if(GM.E[n][i]!=GraphMatrix.Maxvalue&&GM.isTraw[i]==0){
DeepTraOne(GM,i);
}
}
}
}