




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
StatusBuild_AdjList(ALGraph&G)//輸入有向圖的頂點(diǎn)數(shù),邊數(shù),頂點(diǎn)信息和邊的信息{if(v<0)returnERRORif(a<0)returnERROR();//{t=getchar();h=getchar();//t為弧尾,h為弧頭if((i=LocateVex(G,t))<0)returnERROR;if((j=LocateVex(G,h))<0)returnERROR;//頂點(diǎn)未找到 if(!G.vertices.[i].firstarc)G.vertices[i].firstarc=p;{ }returnOK;StatusInsert_Vex(MGraph&G,charv)//在鄰接矩陣表示的圖G上頂點(diǎn){if(G.vexnum+1)>MAX_VERTEX_NUMreturnINFEASIBLE;returnStatusInsert_Araph&G,charv,charw)//在鄰接矩陣表示的圖G上邊{if((i=LocateVex(G,v))<0)returnERROR;if((i=LocateVex(G,v))<0)returnERROR;if(i==j)returnERROR;{}return{G.vexs[m]<->G.vexs[n將待刪除頂點(diǎn)交換到最后一個(gè)頂點(diǎn){G.arcs[m][i]=G.arcs[n][i將邊的關(guān)系隨之交換}returnOK;returnStatusDelete_Araph&G,charv,charw)//在鄰接矩陣表示的圖G上刪除邊{if((i=LocateVex(G,v))<0)returnERROR;{}returnStatusInsert_Arc(ALGraph&G,charv,charw)//在鄰接表表示的圖G上邊{if((i=LocateVex(G,v))<0)returnERROR;p=(ode*)malloc(sizeof(ode));if(!G.vertices[i].firstarc)G.vertices[i].firstarc=p;{ if(q->adjvex==j)returnERROR;//邊已經(jīng)存在}return{{)//{ }else{{ }{)//{ }else{{ }{G.xlist[i]=G.xlist[i+1修改表頭向量--;//}returnOK;returnOK;{if((i=LocateVex(G,v))<0)returnERROR;{if(!p)returnERROR;//未找到i{if(!p)returnERROR;//未找到ireturnOK;{if(v<0)returnERRORif(a<0)returnERROR();//{{t=getchar();h=getchar();//t為弧尾,h為弧頭if((i=LocateVex(G,t))<0)returnERROR;if((j=LocateVex(G,h))<0returnERROR頂點(diǎn)未找到p->ilink=NULL;p->jlink=NULL;//邊結(jié)點(diǎn)賦初值if(!G.adjmulist[i].firstedgeG.adjmulist[i].firstedge=p;{{ }if(r->ivex==ir->ilink=p;//iivex域中,elser->jlink=p;//jvex域中}//else//i鏈表尾if(!G.adjmulist[j].firstedge)G.adjmulist[j].firstedge=p;{{{ }elser->ilink=p;}//else//j鏈表尾returnOK;{{])return1;intPass_ALGraph(ALGraphG)//判斷一個(gè)鄰接表的有向圖是不是可傳遞的,是則返1,0{{{if(z!=x&&!is_adj(G,x,z))return0;intis_adj(ALGraphG,intm,intn)//G中是否存在邊(m,n),1,否0{if(p->adjvex==n)return1;return];//intexist_path_DFS(ALGraphG,inti,intj)//Gi{if(i==jreturn1;ij{{))intexist_path_BFS(ALGraphG,inti,intj)//Gi{intvisited[MAXSIZE];{{if(k==j)return1;return{{intvisited=1;{{{);//}{{}{]));//if(!indegree[iPush(S,i零入度結(jié)點(diǎn)入棧{new[i]=n{if(count<G.vexnum)returnERROR;//圖中存在環(huán)for(i=1;i<=n;iprintf("OldNo:%dNewNo:%d\n",i,new[i])returnOK;分析:只要按仄逆序?qū)旤c(diǎn),就可以使鄰接矩陣成為下三角矩陣.intintexist_path_len(ALGraphG,inti,intj,intk)//判斷鄰接表方式的有向圖ijk{{if(i==j&&k==0return1;找到了一條路徑,且長度符合要求elseif(k>0){{))//return0;];//intFind_All_Path(ALGraphG,intu,intv,intk)//Guv之間的所有簡單路徑,k表示當(dāng)前路徑長度{path[k]=u;加入當(dāng)前路徑中//{printf("Foundone++)]);//}{]));//}path[k]=0;回溯{intGetPathNum_Len(ALGraphG,inti,intj,intlen)//求鄰接表方式的有向圖ijlen的簡單路徑條數(shù)ijlen{if(i==j&&len==0)return1;找到了一條路徑,且長度符合要求elseif(len>0){sum=0;//sum表示通過本結(jié)點(diǎn)的路徑數(shù){returnsum;intintpath[MAXSIZEintcycount=0;{for(v=0;v<G.vexnum;v++)visited[v]=0;]));//voidDFS(ALGraphG,intv,intk)//k{path[k]=v;//記錄當(dāng)前路徑{else//發(fā)現(xiàn)了一條回路{for(i=0;path[i]!=w;i++);//找到回路的起點(diǎn)for(j=0;path[i+j];i++)thiscycle[j]=path[i+j];//把回路下來())++)////intexist_cycle()//thiscycle數(shù)組中記錄的回路在cycles{int++)//{//也就是,所有結(jié)點(diǎn)和它們的順序都相同j=0;c=thiscycle例如,142857857142是相同的回路])//{ pare(temp,thiscyclethiscycle比較return1;//完全相等++)//}return0;thiscycle明存在一條回路;掃描路徑向量path可以獲得這條回的所有結(jié)點(diǎn).把結(jié)點(diǎn)序列(例如,142857)thiscycle中;由于這種算法中,一條回路會(huì)被發(fā)現(xiàn)好幾次,所以必須先判斷該cycles中被記錄過,cycles的一個(gè)行向量中.把cycles的每一個(gè)行向量取出來與之比較.由于一條回路可能有多種順序,比如142857等同于285714571428,所以還要調(diào)整行向量的次序,并存入temp數(shù)組,例如,thiscycle142857第一個(gè)結(jié)1,cycles的當(dāng)前向量為857142,則找到后者中的1,1后部分提到1前部分intvisited[MAXSIZE];intfinished[MAXSIZE];intcountcount在第一次深度優(yōu)先遍歷中用于指示finished{{++)//++)//--)//{{printf("\n不同的強(qiáng)連通分量在不同的行輸出}voidDFS1(OLGraphG,intv)//{{if(!visited[w])DFS1(G,w);finished[++count]=v;在第一次遍歷中建立finishedvoidDFS2(OLGraphG,intv)//{printf("%d",v在第二次遍歷中輸出結(jié)點(diǎn)序號(hào){if(!visited[w])DFS2(G,w);分析:求有向圖的強(qiáng)連通分量的算法的時(shí)間復(fù)雜度和深度優(yōu)先遍歷相同,也為O(n+e).voidForest_Prim(ALGraphG,intk,CSTree&T)//從頂點(diǎn)k出發(fā),構(gòu)造鄰接表結(jié)構(gòu)的有向GT,用孩子兄弟鏈表{{{{elseForest_Prim(G,k);//對(duì)另外通分量執(zhí)行算voidAddto_Forest(CSTree&T,inti,intj)//把邊(i,j)添加到孩子兄弟鏈表表示的樹T中{p=Locate(T,iip,過程略q-//{p-}//作為新樹到最右elseif(!p->firstchild)p->firstchild=q;作為雙親的第一個(gè)孩子else//雙親已經(jīng)有了孩子{//}{T=(CSTNode*)malloc(sizeof(CSTNode建立樹根T=(CSTNode*)malloc(sizeof(CSTNode建立樹根分析:Prim算法的基礎(chǔ)上添加了非連通圖支持和孩子兄弟鏈表構(gòu)建模塊而得到的,其時(shí)間復(fù)雜度為O(n^2).typedefstructintvex;intecno;}VexInfovexs[MAXSIZE記錄結(jié)點(diǎn)所屬連通分量號(hào)的數(shù)組voidInit_VexInfo(VexInfo&vexs[],intvexnum)//初始化{};//intis_ec(VexInfovexs[],inti,intj)//判斷頂點(diǎn)i和頂點(diǎn)j是否屬于同通分{ o)return1;elsereturn0;elsereturnvoidmerge_ec(VexInfo&vexs[intec1,intec2)//ec1{ o==ec2) voidMinSpanTree_Kruscal(GraphG,EdgeSetType&EdgeSet,CSTree&T)//求圖的最小{ecnum=G.vexnum連通分量個(gè)數(shù){GetMinEdge(EdgeSet,u,v);//選出最短邊if(!is_ec(vexs,u,vuv屬于不同連通分量{Addto_CSTree(T,u,v);//加入到生成樹中 o);//合并連通分量});//T{p=Locate(T,iip,過程略q-//p->firstchild=q;作為雙親的第一個(gè)孩子else//雙親已經(jīng)有了孩子{//},并存入數(shù)組new{{];//if(!indegree[i])Push(S,i);{Pop(S,i);new[i]=++count把拓?fù)漤樞虼嫒霐?shù)組的對(duì)應(yīng)分量中{}if(count<G.vexnum)returnERROR;returnOK;int{{{for(w=0;w<G.vexnum;w++)visited[w]=0;//每次都要將數(shù)組清零DFS(G,v);//v出發(fā)進(jìn)行深度優(yōu)先遍歷if(!visited[w])flag=0;//如果v是根,則深度優(yōu)先遍歷可以到所有結(jié)if(flag)printf("FoundarootvoidDFS(ALGraphG,intv){{if(!visited[w])DFS(G,w);}voidFill_MPL(ALGraph&G)//GMPL{])intGet_MPL(ALGraph&G,inti)//從一個(gè)頂點(diǎn)出發(fā)構(gòu)建MPL域并返回其MPL{{return0;零出度頂點(diǎn)}{{if(k>max)max=k;MPL}G.vertices[i]=max+1;//再加一,就是當(dāng)前頂點(diǎn)的MPLreturnmax+1;intmaxlen,path[MAXSIZE];//數(shù)組path用于當(dāng)前路intmlp[MAXSIZE];//數(shù)組mlp用于已發(fā)現(xiàn)的最長路{{])}printf("Longest++)]);//voidDFS(ALGraphG,inti,int{)//{{++)];//}{{}{]);//{if(!G.vertices[i].firstarcc是原子else//子表達(dá)式{}{{]);//returnintEvaluate_imp(ALGraphG,inti)//{if(G.vertices[i].tag=NUM)returnG.vertices[i].value;{returncalculate(v1,G.vertices[i].optr,v2);}分析:本題中,鄰接表的vertices向量的元素類型:struct{enumtag{NUM,OPTR};u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年秦創(chuàng)原(咸陽)創(chuàng)新促進(jìn)中心招聘(12人)筆試參考題庫附帶答案詳解
- 2024年河北廊坊三河市燕郊高新物業(yè)管理有限公司公開選聘工作人員3名(第二批)筆試參考題庫附帶答案詳解
- 2024國家能源集團(tuán)共享服務(wù)中心有限公司系統(tǒng)內(nèi)招聘15人筆試參考題庫附帶答案詳解
- 2024四川省國有資產(chǎn)經(jīng)營投資管理有限責(zé)任公司招聘2人筆試參考題庫附帶答案詳解
- 陜西應(yīng)急廳面試題及答案
- 2023二年級(jí)數(shù)學(xué)下冊(cè) 四 認(rèn)識(shí)萬以內(nèi)的數(shù)第8課時(shí) 近似數(shù)教學(xué)實(shí)錄 蘇教版
- T-CNAS 04-2019 住院患者身體約束護(hù)理
- T-CNHA 1025-2024“領(lǐng)跑者”標(biāo)準(zhǔn)評(píng)價(jià)要求 吸油煙機(jī)
- T-PDNXH 205-2024 南匯水蜜桃 地理標(biāo)志專用標(biāo)志申請(qǐng)使用管理規(guī)范
- DB1310T 331-2024藤本月季養(yǎng)護(hù)技術(shù)規(guī)程
- 2024年廣東省中考地理試題含答案
- 英語KET詞匯中譯英列表
- 古詩詞誦讀《江城子+乙卯正月二十日夜記夢(mèng)》課件+2024-2025學(xué)年統(tǒng)編版高中語文選擇性必修上冊(cè)
- 讀書分享讀書交流會(huì)《皮囊》課件
- GB 30510-2024重型商用車輛燃料消耗量限值
- DB34∕ 1659-2022住宅工程質(zhì)量常見問題防治技術(shù)規(guī)程
- 單腳交換跳短繩(教學(xué)設(shè)計(jì))人教版體育三年級(jí)上冊(cè)
- 2024江蘇宿遷宿豫區(qū)總工會(huì)公開招聘5人易考易錯(cuò)模擬試題(共200題)試卷后附參考答案
- 延長石油行測真題
- 2024過敏性休克搶救指南(2024)課件干貨分享
- 2024年黑龍江省通信工程安全員(B證)考試題庫及答案(管局版)
評(píng)論
0/150
提交評(píng)論