-
大小: 3KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-05-09
- 語言: Java
- 標(biāo)簽: 數(shù)據(jù)結(jié)構(gòu)??圖??
資源簡介
數(shù)據(jù)結(jié)構(gòu) 圖 (鄰接矩陣) java圖形界面 實(shí)現(xiàn)
圖的深度優(yōu)先遍歷算法 廣度遍歷算法 刪除增加頂點(diǎn)等

代碼片段和文件信息
//數(shù)據(jù)結(jié)構(gòu):圖遍歷程序
import?java.util.*;
import?java.awt.*;
import?javax.swing.*;
import?java.awt.event.*;
class?MGraph
{
????private?boolean[]?visited;?//是否遍歷過
????private?int[][]?graph;?//二維數(shù)組圖
????public?linkedList?vertex?=?new?linkedList();???//定義鏈表來存儲圖的頂點(diǎn)
????public?MGraph()
????{
vertex.clear();
visited?=?new?boolean[10];
graph?=?new?int[10][10];
for(int?i?=?0;?i?10;?i++)
{
???? visited[i]?=?false;
???? for(int?j?=?0;?j? {
graph[i][j]?=?0;
????????????}
}
????}
????public?void?initGraph()??//構(gòu)造默認(rèn)圖
????{
vertex.clear();??????//清空鏈表
???? vertex.addLast(“A“);
vertex.addLast(“B“);
vertex.addLast(“C“);
vertex.addLast(“D“);
vertex.addLast(“E“);
this.Delvisited();
????????//把有邊的設(shè)為1
????????graph[0][1]?=?1;graph[1][0]?=?1;?//點(diǎn)1-2
????????graph[0][4]?=?1;graph[4][0]?=?1;?//點(diǎn)1-5
????????graph[1][2]?=?1;graph[2][1]?=?1;?//點(diǎn)2-3
????????graph[1][3]?=?1;graph[3][1]?=?1;?//點(diǎn)2-4
????????graph[2][4]?=?1;graph[4][2]?=?1;?//點(diǎn)3-5
????}
????public?void?Delvisited()???//初始化遍歷數(shù)組
????{
???? for(int?i?=?0;?i????? visited[i]?=?false;
????}
/*
????public?String?GetVex(int?i)???//取圖中第i個頂點(diǎn)的數(shù)據(jù)信息
????{
return?vertex.get(i);
}
*/
public?void?PutVex(int?iString?value)??//將圖中第i個頂點(diǎn)的數(shù)據(jù)域置為value
{
vertex.set(ivalue);
}
public?void?AddVex(String?value)??//在圖中加入一個頂點(diǎn)值為value
{
vertex.addLast(value);
}
public?void?ShowVex()
{
for(int?i=0;i {
System.out.print(“頂點(diǎn)“+(i+1)+“:?“+vertex.get(i));
GraphGui.textarea1.append(“頂點(diǎn)“+(i+1)+“:?“+vertex.get(i)+“?“);
}
}
public?void?DeleteVex(int?x)???//刪除圖中第x個頂點(diǎn)
{
vertex.remove(x);???????????//刪除一個頂點(diǎn)后,注意vertex.size()已經(jīng)減少1了
for(int?i=x;i for(int?j=0;j {
graph[i][j]=graph[i+1][j];
}
for(int?i=0;i for(int?j=x;j {
graph[i][j]=graph[i][j+1];
}
}
public?void?InserArc(int?iint?j)??//在圖中插入一條邊,其依附的兩個頂點(diǎn)的編號為i和j
{
graph[i][j]?=?1;
}
public?void?DeleteArc(int?iint?j)??//在圖中刪除一條邊,其依附的兩個頂點(diǎn)的編號為i和j
{
graph[i][j]?=?0;
}
????public?void?DFSTraverse(int?x)???????????//深度優(yōu)先遍歷圖
????{
System.out.print(vertex.get(x)+“?“);???//訪問頂點(diǎn)
GraphGui.textarea2.append(vertex.get(x)+“?“);
visited[x]?=?true;?????????????????//標(biāo)記為已訪問過
????????for(int?i?=?0;?i?????????{
????????????if(graph[x][i]?==?1?&&?visited[i]?==?false)?//如果有邊而又未被訪問過
????????????{
????????????????DFSTraverse(i);??????????//遞歸遍歷點(diǎn)
????????????}
????????}
????}
????public?void?BFSTraverse(int?v)???????????//廣度優(yōu)先遍歷圖
????{
???? Queue?queue=new?Queue();??//初始化隊(duì)列
???? System.out.print(vertex.get(v)+“?“);???//訪問頂點(diǎn)
???? GraphGui.textarea2.append(vertex.get(v)+“?“);
???? visited[v]?=?true;
???? queue.EnQueue(v);?????????????????????//當(dāng)前訪問的頂點(diǎn)的編號入隊(duì)
???? while(queue.is
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????9753??2011-05-29?18:30??GraphGui.java
-----------?---------??----------?-----??----
?????????????????9753????????????????????1
評論
共有 條評論