




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
構造圖結構(鄰接矩陣或鄰接表表示),并實現以下操作
1.圖的深度優(yōu)先和廣度優(yōu)先遍歷
2.圖的最小生成樹(prim算法或kruskal算法)
packageseventh;
interfaceSqelist<T>{〃鏈表類接口--2018--10-15-高金磊
publicvoidinsert(Tt);〃尾插
publicvoidinsert(inti,Tt)throwsException;//插入成為第i個元素
publicTdelect(inti)throwsException;//取出第i個并刪除
publicTgetNode(inti)由rowsExceplion;〃取出第i個元素但不刪除
publicbooleanisEmptyO;
)
packageseventh;
classNode{/*鏈表基本單元類
*記錄鏈表基本數據和地址
*數據存儲為int型
*高金磊--2018-11-25
**/
charname;〃列名
Nodenext=null;
publicNode(){
)
publicNode(chardata){
this(data,null);
)
publicNode(chardata,NodenextNode){
=data;
this.next=nextNode;
)
publicintgetData(){
returnname;
}
publicNodegetNext(){
returnnext;
}
publicvoidsetData(chardata){
=data;
}
publicvoidsetNext(Nodenext){
this.next=next;
}packageseventh;
publicclassMatriximplementsAbstractMatrix<Integer>{
intlength;〃容器長度
publicIntegerelement口口;〃矩陣對象
publicMatrix(int1){〃構造長度為1的矩陣
if(l>=D{
this.length=l;
element=newIntegerfl][l];
}else{
try(
thrownewException("構造矩陣長度小于等于1是一種錯誤");
}catch(Exceptione){
//TODO自動生成的catch塊
e.printStackTrace();
@Override
publicvoidset(intx,inty,Integert){
while(x>=length||y>=length){〃擴大容量
getmoreMaxMatrix();
)
element[x][y]=t;
)
@Override
publicIntegerget(intx,inty){
returnelement[x][y];〃數組越界用自帶的異常處理機制
)
?Override
publicIntegerfindelect(intx,inty){//刪除x行y列元素并將后面的元素整體
前移--不返回任何信息
Integer[][]middle二newIntegerfelement.length][element.length];
for(inti=0;i<element.length-1;i++){
for(intj=0;j<element.length-1;j++){
intis=i>=x?i+l:i;
intjs=j>=y?j+l:j;
middle[i][j]=element[is][js];
element=middle;
returnnull;
@Override
publicintgetRows(){
returnthis.length;
)
?Override
publicintgetColumns(){
returnthis.length;
)
@Override
publicintgetLengh(){
//TODO自動生成的方法存根
return0;
)
?Override
publicvoidgetmoreMaxMatrix(){〃擴容二倍
Integer[][]middle=newInteger[element.length*2][element.length*2];
for(inti=0;i<element.length;i++){
fbr(intj=0;j<element.length;j++){
middlefi][j]=element[i][j];
element二middle;
this,length=element,length;//通知擴容完畢
)
@Override
publicStringtoStringO{
for(inti=0;i<element.length;i++){
Integerf]js=element[i];
fbr(intj=0;j<js.length;j++){
intm=js[j]!=null?js[j]:Graph.MAXWEIGHT;
System.out.print(m+,,\tH);
)
System.out.println();
returnsuper.toString();
packageseventh;
publicclassListimplementsSqelist<Node>{〃順序表用于保存結點的信息
Nodeheade=newNode。;//頭部結點
intlength=0;
@Override
publicvoidinsert(NodetNode){
Nodenode=heade;
while(node.next!=null){
node=node.next;
)
node.next=tNode;
length++;
)
@Override
publicvoidinsert(inti,NodetNode)throwsException{
if(i>length+l){
thrownewException(“越界"+”\t線性表的總長為”+length+”\n"+”向第
”+i+”個位置插入元素是一種錯誤)
)
else{
Nodenode=heade;
intmiddle=0;
while(middle!=i-l){
middle++;
node=node.next;
)
tNode.next=node.next;
node.next=tNode;
)
length++;
)
?Override
publicNodedelect(inti)throwsException{
NodedelectNode=null;
if(i>length+l){
thrownewException(“越界"+”\t線性表的總長為“+怕華山+”\11”+"刪除
第"+i+”個位置的元素是一種錯誤)
else{
Nodenode=heade;
intmiddle=0;
while(middle!=i-l){
middle++;
node=node.next;
)
delectNode=node.next;
node.next=node.next.next;
)
length—;
returndelectNode;
)
@Override
publicNodegetNode(inti)throwsException{
Noderesult=null;
if(i>length+l){
thrownewException("越界"+”\t線性表的總長為“+歸期出+”\/+”刪除
第"+i+”個位置的元素是一種錯誤)
}
else{
Nodenode=heade;
intmiddle=0;
while(middle!=i-l&&i!=O){
middle++;
node=node.next;
)
result=node.next;
)
returnresult;
)
@Override
publicbooleanisEmpty(){
returnheade.next=null;
)
?Override
publicStringtoStringO{
Stringresult="”;
Nodenode=heade;
while(node.next!=null){
node=node.next;
result=result+^Xn'^;
returnresult;
packageseventh;
publicclassGraphimplementsAbstractGraph<Node>{
protectedstaticintMAXWEIGHT=Oxffff;〃設置正無窮
protectedListlist=newList。;//存放頂點的順序表
protectedMatrixedge=newMatrix(2);〃生成矩陣用來表示每個邊的權值
?Override
publicintvertexCount。{〃頂點個數
returnlist.length;
)
(?Override
publicNodegetvertex(inti)throwsException{〃返回第i個頂點--越界異常
returnlist.getNode(i);
)
@Ovemde
publicvoidsetVertex(inti,Nodex)throwsException{〃插入x為第i個元素一
越界異常
list.insert(i,x);
)
@Override
publicintinsertVertex(Nodex){//插入一個頂點x--尾插一返回插入的位置
list.insert(x);
edge.set(list.length-1,list.length-1,null);//通知并判斷是否擴容
returnlist.length;
)
@Override
publicvoidremoveVertex(inti)throwsException{〃刪除第i個頂點
list.delect(i);
edge.delect(i-1,i-1);
)
?Override
publicintnext(inti,intj,boolean口visited){〃返回第i-1行j-1列之后是否元素
的位置
for(intn=0;n<list.length;n++){
if(!visited[n]&&edge.get(i,n)!=null){
returnn;
return-1;
)
@Override
publicvoidinsertEdge(inti,intj,intweight){
edge.set(i-l,j-l,weight);
edge.set(j-l,i-1,weight);
)
?Override
publicvoidremoveEdge(inti,intj){
edge.set(i-l,j-1,null);
edge.set(j-l,i-1,null);
)
@Override
publicintgetweight(inti,intj){
returnedge.get(i-l,j-1);
}''
@Ovemde
publicvoidDFSTraverse(inti)throwsException{
booleanvisited[]=newboolean[this.vertexCount()];
intj=i;
do{
if(!visited[j]){〃還存在沒有遍歷的樹一兼容森林
System.out.print("{");
this.depthfs(j,visited);
System,out.print。}”);
)
j-(j+l)%(this.vertexCount());
}while(j!=i);
System.out.println();
privatevoiddepthfs(intj,boolean[]visited)throwsException{
System.out.print((char)this.getvertex(j+l).getData()+',n);
visited[j]=true;
inti=this.next(j,-1,visited);
while(i!=-l){
if(!visited[i]){
depthfs(i,visited);
i=this.next(j,i,visited);
@Ovemde
publicvoidBFSTraverse(inti)throwsException{〃廣度優(yōu)先算法
booleanvisted[]=newboolean[this.list.length];〃訪問標記數組
intj=i;
do{
if(!visted[j]){
System.out.print("{");
breadthfs(j,visted);
System.out.print(n}n);
)
j-(j+l)%this.vertexCount();
}while(j!=i);
System.out.printlnO;
)
privatevoidbreadthfs(intj,boolean[]visited)throwsException{
System.out.print((char)list.getNode(j4-l).getData());
visited[j]=true;
for(inti=0;i<visited.length;i++){//遍歷該行所有元素
if(!visited[i]&&edge.get(j,i)!=null){
System.out.print((char)list.getNode(i+l).getData());
visited[i]=true;
@Override
publicvoidminSpanTree(){//最小生成樹
intsumweight=0;
Edgeedges[]=newEdge[veilexCount()*vertexCount()];〃用于存儲邊
intn=0;
for(inti=0;i<vertexCount();i++){
for(intj=0;j<vertexCount();j++){
edges[n]=newEdge();
edges[n].x=j;
edges[n].y=i;
edges[n+-i-].weight=edge.get(j,i)==null?MAXWEIGHT:edge.get(j,i);
//需要n-1個邊連接n個結點來組成最小生成樹
for(inti=0;i<vertexCount()-l;i++){
intmiddlex=0;
intmiddley=0;
intweight二MAXWEIGHT;
for(intj=0;j<edges.length;j++){
if(weight>edges[j].weight){
middlex=edges[j].x;
middley=edges[j].y;
weight=edges[j].weight;
)
)
〃輸出一條結果
System.out.println(,,X:',+middlex+n\tY:,'+middley+,,\t權值:"weight);
sumweight+=weight;
〃取消通往〈X,Y>和vy,x>的邊
//取消所有通往y結點的邊
for(intm=0;m<edges.length;m++){
edgesfm].weight=(edges[ml.y==middley)?MAXWEIGHT:edges[m].weight;
edgesfm].weight=(edges[m].x==middlex&&edges[m].y=middley)?MAXWEIG
HT:edges[m].weight;
edges[m].weight=(edges[m].x==middley&&edges[m].y==middlex)?MAXWEIG
HT:edges\m].weight;
System.out.printin("總權值和為:\t"+sumweight);
?Override
publicvoidshortestPath(inti){
@Override
publicvoidshortestPath(){
//TODO自動生成的方法存根
packageseventh;
publicclassEdge{〃邊數據存儲對象
publicintx=0;
publicinty=0;
publicintweight=0;
)
packageseventh;
publicinterfaceAbstractMatrixvT>{〃矩陣接口
voidset(intx,inty,Tt);〃設置<x,y>處的元素值
Tget(intx,inty);〃獲?。紉,y>處的值
intgetRows();〃返回當前總的行數
intgetColumns();〃返回當前總的列數
intgetLengh();//返回總可用長度(默認為方陣)
voidgetmoreMaxMatrix();〃擴容
T[][]delect(intx,inty);〃刪除vx,y>并將后面的前移
StringtoString();
)
packageseventh;
publicinterfaceAbstractGraph<T>{
intvertexCount。;//返回頂點數
Tgetvertex(inti)throwsException,返回頂點Vi元素
voidsetVertex(inti,Tx)throwsException;〃設置頂點Vi元素為x
intinsertVertex(Tx);〃插入頂點x
voidremoveVertex(inti)throwsException;//冊!]除頂點Vi及其臨邊
voidinsertEdge(inti,intj,intweight);//插入邊vVi,Vj>,權值為weight
voidremoveEdge(inti,intj);〃冊!j除邊vVi,Vj>
intgetweight(inti,intj);〃返回vVi,Vj>的權值
voidDFSTraverse(inti)throwsException;〃以Vi為頂點進行深度優(yōu)先遍歷
voidBFSTraverse(inti)throwsException;〃廣度優(yōu)先遍歷
voidminSpanTree。;//求最小生成樹
voidshortestPath(inti);〃求帶權圖頂點Vi的單源最短路徑
voidshortestPath。;//求帶權圖的每對頂點的最短路徑以及長度
intnext(inti,intj,boolean口visted);//返回Vi在Vj后的后繼鄰接頂點序號
)
packageseventh;
publicclassTest{
publicstaticvoidmain(String[]args){
Listlist=newList();
System.out.println(list.toStringO);
list.insert(newNode('a'));
list.insert(newNode('b'));
list.insert(newNode('c'));
list.insert(newNode(d));
System,out.printin("測試單鏈表的插入功能:”+list.toString());
try{
list.delect(3);
}catch(Exceptione){
//TODO自動生成的catch塊
e.printStackTrace();
)
System,out.printin("測試單鏈表的刪除功能:“+list.toString());
try(
Matrixmatrix二newMatrix(lO);
fbr(inti=0;i<matrix.length;i++){
for(intj=0;j<matrix.length;j++){
matrix.set(i,j,i+j);
))
matrix.set(19,19,100);
System.out.printin("測試矩陣的插入刪除和自動擴容功能”);
matrix.toStringO;
matrix.delect(3,3);
matrix.toString();
}catch(Exceptione){
//TODO自動生成的catch塊
e.printStackTrace();
)
try(
Sy
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國鐵路機車車輛配件制造行業(yè)十三五規(guī)劃及發(fā)展前景分析報告
- 2025-2030年中國金屬鉍行業(yè)運行現狀及發(fā)展前景分析報告
- 2025-2030年中國過氧化氫行業(yè)市場運行動態(tài)與營銷策略研究報告
- 2025-2030年中國調壓器市場運行現狀及發(fā)展前景預測報告
- 2025-2030年中國空氣清新機行業(yè)運行現狀及發(fā)展趨勢預測報告
- 貴州工程應用技術學院《運動醫(yī)務監(jiān)督與康復治療》2023-2024學年第二學期期末試卷
- 2025年海南省安全員《B證》考試題庫
- 2025年建筑安全員B證考試題庫
- 山東現代學院《建筑設備CAD》2023-2024學年第二學期期末試卷
- 朔州師范高等??茖W?!峨姽y試技術(上)》2023-2024學年第二學期期末試卷
- 2024初中數學課程標準測試題(含答案)精華版
- 2024年陜西延長石油集團礦業(yè)公司招聘筆試參考題庫含答案解析
- 人教版新教材高一上學期期末考試數學試卷及答案(共五套)
- 考試通用答題卡word模板
- 環(huán)境監(jiān)理業(yè)務手冊(word)
- 人文關懷與優(yōu)質護理課件
- 知識圖譜可視化-Neo4j(windows)
- 光伏電站作業(yè)危險點分析及預控措施手冊
- 2021年深圳實驗學校初中部七年級入學分班考試數學試卷及答案解析
- 水文流量測驗
- 合作共贏商務合作PPT模板(基礎教育)
評論
0/150
提交評論