:图结构是一种非线性结构,如:通信网络,交通网络,人际关系网
什么是图结构:每一个数据元素之间可以人衣服相关联。
典型的图结构包括:顶点(数据元素)和边(链接顶点的线)
G=(V,E) V:表示所有顶点的集合 E:表示所有边的集合
图的基本概念
- 无向图:所有边都是没有方向性的,便称为无向图
- 有向图:所有的边都是有向性的,与无向图相反
- 顶点的度(degree):连接该顶点的边的数量为该顶点的度
- 出度:该顶点为端点的出边数量
- 入度:该顶点为端点的入边数量
- 邻接顶点:一条边的两个顶点
- 无向完全:每一个顶点之间都存在一条边
- 有向完全图:每个顶点之间都存在方向相反的两条边
- 子图:一个子图的顶点和边都应该是另一个图的集合
- 路径:两个顶点之间的连线
- 环:路径的第一个顶点和最后一个顶点是相同的
- 回路:路径的第一个顶点和最后一个顶点是相同的
- 连通图,连通分量:无向图中任意两点都是连通的
-强连通图:有向图中任意两点都是连通的 - 权:对边赋予某种含义,在实际中将边表示成某种数值,这个数值叫做权
- 网:带有权值的图
图的实现
顶点之间是多对多的关系,无法将顶点映射到内存
采用结构数组的形式来单独保存顶点信息,然后采用二维数组的形式保存顶点之间的关系(保存顶点之间的关系的也称作邻接矩阵)
Class CraphMatrix{
static final int MaxNum = 20;
static final int MaxValue = 65535;
char[] Vertex = new char[MaxNum]; //保存边的信息
int GType; //图的类型[0为无向图,1为有向图]
int VertexNum; //顶点的数量
int EdgeNum; //边的数量
int[][] EdgeWeight = new int[MaxNum][MaxNum];
int[][] isTrav = new int[MaxNum];
}
public class G{
static Scanner input = new Scanner(System.in);
static void CreateGrap(GraphMatrix GM){
int i,j,k;
int weight;
char EstartV,EndV; //边的起始顶点
System.out.println("输入途中个顶点信息\n");
for(i = 0; i < GM.VetexNum; i++){
System.out.printf("第%d个顶点:" ,i + 1);
GM.Vetex[i] = (input.next().toCharArray())[0]; //保存个顶点到数组元素中
System.out.println("输入各个边的顶点及权值:\n");
for(k = 0; k < GM.EdgeNum; k++){
System.out.printf("第%d条边:" k+1);
EstartV = input.next().charAt(0);
EendtV = input.next().charAt(0);
weight = input.nextInt();
for(i = 0;EstartV != GM.Vetex[i]; i++);
for(j = 0;EendV != GM.Vetex[j]; j++);
GM.EdgeWeight[i][j] = weight;
if(GM.Gtype == 0){ //若是无向图
GM.EdgeWeight[j][i] = weight; //在对角的地方保存权值
}
}
}
static void ClearGrap(GraphMatrix GM){
int i,j;
for(i = 0; i < GM.VetexNum; i++){ //清空矩阵
for(j = 0; j < GM.VetexNum; j++){
GM.EdgeWeight[i][j] = GraphMatrix.MaxValue;
}
}
}
static void OutGraph(GraphMatrix GM){
int i,j;
for(j = 0; j < GM.VetexNum; j++){
System.out.printf("\t%c",GM.Vetex[j]);
}
System.out.println();
for(i = 0; i < GM.VetexNum; i++){
System.out.println("%c", GM.EdgeVetex[i]);
for(int j = 0; j < GM.VetexNum; j++){
if(GM.EdgeWeight[i][j] == GraphMatrix.MaxValue){
System.out.printf("\tZ");
}else{
System.out.printf("\t%d",GM.EdgeWeight[i][j]);
}
}
System.out.println();
}
}
static void DeepTraOne(GraphMatrix GM, int n){}
static void DeepTraGraph(GraphMaxtrix GM){}
}
}