{"id":564,"date":"2007-03-05T11:33:00","date_gmt":"2007-03-05T03:33:00","guid":{"rendered":"http:\/\/note.systw.net\/note\/?p=564"},"modified":"2023-11-04T11:37:00","modified_gmt":"2023-11-04T03:37:00","slug":"graph","status":"publish","type":"post","link":"https:\/\/systw.net\/note\/archives\/564","title":{"rendered":"Graph"},"content":{"rendered":"\n<p>\u57fa\u672c\u540d\u8a5e<br>eulerian path(\u5c24\u62c9\u8def\u5f91),eulerian cycle(\u5c24\u62c9\u8ff4\u8def)\uff1a\u5f9e\u67d0\u9ede\u51fa\u767c\uff0c\u6bcf\u500b\u908a\u5404\u7d93\u904e\u4e00\u6b21\uff0c\u4e26\u56de\u5230\u539f\u9ede<br>eulerian chain(\u5c24\u62c9\u4e32\u93c8)\uff1a\u5f9e\u67d0\u9ede\u51fa\u767c\uff0c\u6bcf\u500b\u908a\u5404\u7d93\u904e\u4e00\u6b21\u5373\u53ef<\/p>\n\n\n\n<p>\u7531\u9802\u9ede\u96c6\u5408(vertex,V)\u8207\u908a\u96c6\u5408(edges,E)\u7d44\u6210,\u56e0\u6b64\u5716\u5f62\u8868\u793a\u6210G=(V,E)<br>vertex\u8868\u793a\u6210V(G),\u7531\u9802\u9ede\u7d44\u6210\u7684\u96c6\u5408\uff0c\u4e0d\u5141\u8a31\u7a7a\u96c6\u5408<br>edges\u8868\u793a\u6210E(G),\u7531\u908a\u7d44\u6210\u7684\u96c6\u5408\uff0c\u5141\u8a31\u7a7a\u96c6\u5408<\/p>\n\n\n\n<p>path(\u8def\u5f91)\uff1a\u4e00\u7d44\u908a\u6240\u5f62\u6210<br>simple path(\u7c21\u55ae\u8def\u5f91):\u8def\u5f91\u4e2d\u7684\u9ede\u53ea\u51fa\u73fe\u4e00\u6b21<br>\u76f8\u9130\uff1a\u5169\u9ede\u5b58\u5728\u4e00\u908a\uff0c\u7a31\u5169\u9ede\u70ba\u76f8\u9130<br>\u76f8\u9023\u901a\uff1a\u5169\u9ede\u5b58\u5728\u4e00\u8def\u5f91\uff0c\u7a31\u5169\u9ede\u70ba\u76f8\u9023\u901a<br>connected graph(\u9023\u901a\u5716)\uff1a\u4efb\u4e8c\u9ede\u90fd\u5b58\u5728\u4e00\u500b\u8def\u5f91\u7684\u5716\u5f62\uff0c\u4e00\u500b\u5716\u8981\u9023\u901a\u81f3\u5c11\u8981n-1\u500b\u908a\uff0c\u82e5\u5404\u9ede\u4e92\u9023\u5247\u908a\u6578(n-1)n\/2<br>connected component(\u9023\u901a\u55ae\u5143)\uff1a\u9023\u901a\u5716\u7684\u5b50\u5716<br>degree(\u5206\u652f\u5ea6)\uff1a\u9ede\u6240\u9023\u63a5\u7684\u908a\u6578,\u5c0d\u6709\u5411\u5716\u800c\u8a00\u9084\u5206in degree\u9032\u5165\u5206\u652f\u5ea6\u548cout degree\u96e2\u53bb\u5206\u652f\u5ea6<br>weighted graph(\u52a0\u6b0a\u5716)\uff1a \u5404\u908a\u7686\u6709\u4e00\u500b\u52a0\u6b0a\uff0c\u8868\u793a\u5169\u9ede\u8ddd\u96e2\u6216\u6210\u672c<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..<\/p>\n\n\n\n<p>\u5716\u5f62\u8868\u793a\u6cd5<br><strong>\u76f8\u9130\u77e9\u9663<\/strong>\uff1a\u82e5\u6709n\u500b\u9ede\u5247\u7528n*n\u7684\u4e8c\u7dad\u77e9\u9663\u8868\u793a\uff0c\u4e14\u5c0d\u89d2\u7dda\u5143\u7d20\u7686\u70ba0\uff0c\u82e5graph[i][j]=1\u8868\u793a\u9edei\u548c\u9edej\u76f8\u9023\uff0c\u82e5\u70ba\u52a0\u6b0a\u5716\u52471\u53ef\u6539\u6210\u52a0\u6b0a\u503c\uff0c\u53e6\u5916\u7121\u5411\u5716\u6703\u5c0d\u7a31\uff0c\u6709\u5411\u5716\u4e0d\u4e00\u5b9a\u5c0d\u7a31<br>\u82e5\u9ede\u591a\u908a\u5c11\uff0c\u5247\u6703\u6210\u70ba\u7a00\u758f\u77e9\u9663\uff0c\u4f46\u82e5\u662f\u7121\u5411\u5716\u5247\u53ef\u53ea\u5132\u5b58\u5c0d\u7a31\u7684\u53e6\u4e00\u908a\u4ee5\u7bc0\u7701\u7a7a\u9593<br>\u8981\u627e\u591a\u5c11\u908a\uff0c\u662f\u5426\u9023\u901a\u5716\uff0c\u90fd\u662fbig O(N^2)\uff0c(\u56e0\u70ba\u8981\u5728n*n\u7684\u4e8c\u7dad\u77e9\u9663\u627e)<br>\u512a\u9ede\uff1a\u6700\u7c21\u55ae\u5b89\u5168\u7684\u8868\u793a\u6cd5<br>\u7f3a\u9ede\uff1a\u53ef\u80fd\u5f62\u6210\u4e00\u500b\u7a00\u758f\u77e9\u9663<\/p>\n\n\n\n<p><strong>\u76f8\u9130\u4e32\u5217<\/strong>\uff1an\u500b\u9ede\u7684\u5716\u7528n\u500b\u93c8\u7d50\u4e32\u5217\u8868\u793a\uff0c\u800c\u7b2ci\u500b\u93c8\u7d50\u4e32\u5217\u5167\u7684\u5404\u7bc0\u9ede\uff1d\u548c\u7b2ci\u500b\u9ede\u76f8\u9130\u7684\u5404\u9ede<br>\u5c0d\u7121\u5411\u5716\u800c\u8a00\uff0c\u6703\u6709n\u500b\u8d77\u59cb\u9802\u9ede\u548c2e\u500b\u4e32\u5217\u7684\u7bc0\u9ede\uff0c\u800ci\u9ede\u7684\u5206\u652f\u5ea6=\u7b2ci\u500b\u93c8\u7d50\u4e32\u5217\u4e2d\u7bc0\u9ede\u6578<br>ps,2e\u500b\u4e32\u5217\u7684\u7bc0\u9ede:2*\u908a\u6578=\u6240\u6709\u4e32\u5217\u7684\u7bc0\u9ede\u52a0\u7e3d\uff0c\u56e0\u70ba\u4e00\u500b\u908a\u8868\u793a\u5169\u9ede\u4e92\u9023\uff0c\u4e5f\u5c31\u8868\u793a\u5169\u500b\u9ede\u5206\u5225\u5728\u81ea\u5df1\u7684\u93c8\u7d50\u4e32\u5217\u5404\u589e\u52a0\u4e00\u9ede<br>ps,\u7576\u6709\u5411\u5716\u8b8a\u70ba\u96d9\u5411\u6642\u5176\u5be6\u5c31\u6210\u70ba\u4e86\u7121\u5411\u5716<br>\u5c0d\u6709\u5411\u5716\u800c\u8a00\uff0c\u6703\u6709n\u500b\u8d77\u59cb\u9802\u9ede\u548ce\u500b\u4e32\u5217\u7684\u7bc0\u9ede\uff0c\u800ci\u9ede\u7684\u96e2\u53bb\u5206\u652f\u5ea6=\u7b2ci\u500b\u93c8\u7d50\u4e32\u5217\u4e2d\u7bc0\u9ede\u6578<br>\u82e5\u8981\u627e\u51fa\u6709\u5411\u5716\u7684\u9032\u5165\u5206\u652f\u5ea6\u5247\u8981\u5229\u7528\u53cd\u5411\u76f8\u9130\u4e32\u5217\u5354\u52a9<br>\u76f8\u9130\u4e32\u5217\u8cc7\u6599\u7d50\u69cb\uff1a<br>typedef struct node{<br>\u3000int vertex;<br>\u3000int count ;\/\/\u82e5\u8981\u8a08\u7b97\u8a72\u9ede\u908a\u6578\u53ef\u52a0\u6b64\u4e00\u8b8a\u6578<br>\u3000int weight; \/\/\u82e5\u70ba\u52a0\u6b0a\u5716\u53ef\u589e\u6b64\u6b04\u8868\u793a\u52a0\u6b0a\u503c<br>\u3000struct nextnode *path;<br>}list;<br>nextnode headnode[n]; \/\/n\uff1d\u9ede\u6578<br>\u512a\u9ede\uff1a\u53ea\u8868\u793a\u5b58\u5728\u7684\u908a<br>\u7f3a\u9ede\uff1a\u5b58\u53d6\u6548\u7387\u53ca\u5b89\u5168\u6027\u8f03\u5dee<\/p>\n\n\n\n<p><strong>\u76f8\u9130\u591a\u91cd\u4e32\u5217<\/strong><br>\u6703\u6709n\u500b\u8d77\u59cb\u9802\u9ede\u548ce\u500b\u4e32\u5217\u7684\u7bc0\u9ede\uff0c\u4e00\u500b\u908a\u7528\u4e00\u500b\u7bc0\u9ede\u8868\u793a<br>\u5c0d\u7121\u5411\u5716\u800c\u8a00\uff0c\u4e00\u500b\u7bc0\u9ede\u88ab\u4e8c\u500b\u93c8\u7d50\u4e32\u5217\u5171\u7528<br>\u5c0d\u6709\u5411\u5716\u800c\u8a00\uff0c\u4e00\u500b\u7bc0\u9ede\u88ab\u4e00\u500b\u93c8\u7d50\u4e32\u5217\u5171\u7528(\u56e0\u70ba\u908a\u5177\u65b9\u5411\u6027)<br>\u512a\u9ede\uff1a\u6bcf\u500b\u908a\u53ea\u8868\u793a\u4e00\u6b21<br>\u7f3a\u9ede\uff1a\u4e32\u5217\u8868\u793a\u6700\u8907\u96dc<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<\/p>\n\n\n\n<p>\u5716\u7684\u8d70\u8a2a<br><strong>depth first traversal(\u6df1\u5ea6\u512a\u5148\u641c\u5c0b\u6cd5)<\/strong>:\u7528\u5806\u758a\u8655\u7406\u9802\u9ede\uff0c\u4ee5\u905e\u8ff4\u65b9\u5f0f\u9032\u884c\u8d70\u8a2a<br>\u505a\u6cd5\uff1a\u5148\u8d70\u8a2a\u8d77\u59cb\u9edev\uff0c\u4e26\u9078\u8207v\u76f8\u9130\u4e14\u672a\u88ab\u8d70\u8a2a\u7684\u9edew\uff0c\u5c07\u5176\u8996\u70ba\u8d77\u59cb\u9ede\uff0c\u905e\u8ff4\u547c\u53ebdfs<\/p>\n\n\n\n<p>\u865b\u64ec\u78bc\uff1a<br>procedure dfs(v:integer);{<br>\u3000w:integer;<br>\u3000visit[v]:=true;write(v); \/\/\u8d70\u8a2a\u8d77\u59cb\u9edev\uff0c\u4e26\u7d00\u9304\u9edev\u5df1\u8d70\u8a2a<br>\u3000for(each vertex w\u5c6c\u65bcneighbor(v))do{ \/\/\u628a\u6bcf\u500b\u9edev\u7684\u76f8\u9130\u9ede\u90fd\u53d6\u51fa\u505a\u4ee5\u4e0b\u6b65\u9a5f<br>\u3000\u3000if(not visit[w])then{dfs(w);}<br>\u3000}<br>}<\/p>\n\n\n\n<p>\u82e5\u7528\u76f8\u9130\u77e9\u9663\u5247\u70babigO(n^2)\uff0c\u6f14\u7b97\u6cd5\u70ba\uff1a<br>void dfs_matrix(int i){ \/\/N,matrix[][],vistied[]\u70ba\u5168\u57df<br>\u3000int k;<br>\u3000visit(i); \/\/\u8a2a\u554f\u9edei<br>\u3000visited[i]=1; \/\/\u6a19\u793a\u9edei\u5df1\u88ab\u8a2a\u554f\u904e<br>\u3000for(k=0;k &lt; N;k++){<br>\u3000\u3000if(matrix[i][k]==1 &amp;&amp; !visited[k]){dfs_matrix(k);} \/\/\u82e5\u6709\u7bc0\u9ede\u4e14\u6c92\u8d70\u8a2a\u904e\u5247\u9032\u884c\u905e\u8ff4<br>\u3000}<br>}<\/p>\n\n\n\n<p>\u82e5\u7528\u76f8\u9130\u4e32\u5217\u5247\u70babigO(e)\uff0c\u7a7a\u9593\u70ba&#8230;<br>\u6f14\u7b97\u6cd5:<br>void dfs_list(int i){<br>\u3000nextnode *P; int j;<br>\u3000visit(i); \/\/\u8a2a\u554f\u9edei<br>\u3000visited[i]=1; \/\/\u6a19\u793a\u9edei\u5df1\u88ab\u8a2a\u554f\u904e\u3000<br>\u3000p=headnode[i].nextnode;<br>\u3000while(p!=null){<br>\u3000\u3000j=p-&gt;vertex;<br>\u3000\u3000if(!visited[j]){dfs_list(j);} \/\/\u82e5\u6709\u7bc0\u9ede\u4e14\u6c92\u8d70\u8a2a\u904e\u5247\u9032\u884c\u905e\u8ff4<br>\u3000\u3000else{p=p-&gt;nextnode;}<br>\u3000}<br>}<\/p>\n\n\n\n<p>&#8230;&#8230;.<\/p>\n\n\n\n<p><strong>breadth first travesal(\u5ee3\u5ea6\u512a\u5148\u641c\u5c0b\u6cd5)<\/strong>:\u7528\u4f47\u5217\u8655\u7406\u9802\u9ede\uff0c\u4ee5\u8ff4\u5708\u65b9\u5f0f\u9032\u884c\u8d70\u8a2a<br>\u505a\u6cd5\uff1a<br>1\u5148\u8d70\u8a2a\u8d77\u59cb\u9edev\uff0c\u4e26\u5c07v\u653e\u5165\u4f47\u5217<br>2\u5f9e\u4f47\u5217\u53d6\u4e00\u9ede\uff0c\u8d70\u8a2a\u8207\u8a72\u9ede\u76f8\u9130\u4e14\u672a\u8d70\u904e\u7684\u9ede\u653e\u5165\u4f47\u5217<br>\u91cd\u89862\u76f4\u5230\u4f47\u5217\u70ba\u7a7a<\/p>\n\n\n\n<p>\u865b\u64ec\u78bc\uff1a<br>procedure bfs(v:integer);{<br>\u3000w:interger;<br>\u3000q:queue;<br>\u3000visit(v); visited[v]:=true; \/\/\u8d70\u8a2a\u8d77\u59cb\u9edev\uff0c\u4e26\u7d00\u9304\u9edev\u5df1\u8d70\u8a2a<br>\u3000initialqueue(q);<br>\u3000addqueue(q,v); \/\/\u5c07\u9edev\u653e\u5165\u4f47\u5217q<br>\u3000while not emptyqueue(q)do{<br>\u3000\u3000deletequeue(q,v); \/\/\u5f9e\u4f47\u5217q\u53d6\u51fa\u9edev<br>\u3000\u3000for(all vertex w\u5c6c\u65bcneighbor(v))do{ \/\/\u628a\u6bcf\u500b\u9edev\u7684\u76f8\u9130\u9ede\u90fd\u53d6\u51fa\u505a\u4ee5\u4e0b\u6b65\u9a5f<br>\u3000\u3000\u3000if not visit[w] then{ \/\/\u5224\u65b7\u8a72\u9ede\u662f\u5426\u5df1\u8d70\u8a2a<br>\u3000\u3000\u3000\u3000visit[w]:=true;write(w); \/\/\u8d70\u8a2a\u8d77\u59cb\u9edev\uff0c\u4e26\u7d00\u9304\u9edev\u5df1\u8d70\u8a2a<br>\u3000\u3000\u3000\u3000addqueue(q,w); \/\/\u5c07\u9edev\u653e\u5165\u4f47\u5217q<br>\u3000\u3000\u3000}<br>\u3000\u3000}\/\/for<br>\u3000}\/\/while<br>}<\/p>\n\n\n\n<p>\u82e5\u7528\u76f8\u9130\u77e9\u9663\u5247\u70babigO(n^2)\uff0c\u6f14\u7b97\u6cd5\uff1a<br>void bfs_matrix(int i){ \/\/N,matrix[][],vistied[]\u70ba\u5168\u57df<br>\u3000int k;<br>\u3000visit(i); \/\/\u8a2a\u554f\u9edei<br>\u3000visited[i]=1; \/\/\u6a19\u793a\u9edei\u5df1\u88ab\u8a2a\u554f\u904e<br>\u3000addqueue(q,i);<br>\u3000while(i=delqueue(q)){<br>\u3000\u3000for(k=0;k &lt; N;k++){<br>\u3000\u3000\u3000if(matrix[i][k]==1 &amp;&amp; !visited[k]){ \/\/\u82e5\u6709\u7bc0\u9ede\u4e14\u6c92\u8d70\u8a2a\u5247\u505a\u4ee5\u4e0b<br>\u3000\u3000\u3000\u3000visit(k);visited[k]=1;addqueue(q,k);<br>\u3000\u3000\u3000}<br>\u3000\u3000}<br>\u3000}<br>}<\/p>\n\n\n\n<p>\u82e5\u7528\u76f8\u9130\u4e32\u5217\u5247\u70babigO(e),\u7a7a\u9593\u70ba&#8230;<br>\u6f14\u7b97\u6cd5:<br>void bfs_list(int i){<br>\u3000nextnode *P; int j;<br>\u3000visit(i); \/\/\u8a2a\u554f\u9edei<br>\u3000visited[i]=1; \/\/\u6a19\u793a\u9edei\u5df1\u88ab\u8a2a\u554f\u904e<br>\u3000addqueue(q,i);\/\/\u5c07\u9edei\u653e\u5165\u4f47\u5217<br>\u3000while(i=delqueue(q)){<br>\u3000\u3000p=headnode[i].nextnode;<br>\u3000\u3000while(p!=null){<br>\u3000\u3000\u3000j=p-&gt;vertex;<br>\u3000\u3000\u3000if(!visited[j]){visit(j);visited[j]=1;addqueue(q,j);} \/\/\u82e5\u6709\u7bc0\u9ede\u4e14\u6c92\u8d70\u8a2a\u904e\u5247\u9032\u884c\u905e\u8ff4<br>\u3000\u3000\u3000else{p=p-&gt;nextnode;}<br>\u3000\u3000}<br>\u3000}<br>}<\/p>\n\n\n\n<p>\u61c9\u7528\uff1a<br>\u82e5\u53ef\u8d70\u5b8c\u6240\u6709\u9ede\uff0c\u5247\u70ba\u9023\u901a\u5716<br>\u82e5\u4e0d\u662f\u9023\u901a\u5716\uff0c\u800c\u8981\u6c7a\u5b9a\u5716\u5f62\u7684\u6240\u6709\u9023\u901a\u55ae\u5143\uff0c\u4f7f\u7528\u76f8\u9130\u4e32\u5217\u8907\u96dc\u5ea6\u70babigO(n+e)<br>\u8d70\u8a2a\u904e\u7a0b\u4e2d\u7528\u5230\u7684\u908a\u7a31\u70batree edges(\u6a39\u908a)\uff0c\u5176\u9918\u7684\u7a31\u70baback edges(\u5f8c\u908a),\u82e5\u6a39\u542b\u6240\u6709\u9ede\u53ca\u6a39\u908a\u5247\u7a31\u70ba\u64f4\u5f35\u6a39<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;<\/p>\n\n\n\n<p><strong>spanning tree(\u64f4\u5f35\u6a39)<\/strong>\uff1a<br>\u6700\u5c0f\u7684\u9023\u901a\u5b50\u5716<br>\u8aaa\u660e\uff1a\u4e00\u500b\u7121\u5411\u5716\uff0c\u6709n\u500b\u9ede\uff0cn-1\u500b\u908a\uff0c\u4e0d\u5141\u8a31\u6709\u8ff4\u8def\uff0c(\u4e00\u5f35n\u500b\u9ede\u7684\u9023\u901a\u5716\u90fd\u5b58\u5728\u5c0d\u61c9\u7684\u64f4\u5f35\u6a39)<br>the minimun weighted spanning tree(\u6700\u5c0f\u6210\u672c\u64f4\u5f35\u6a39)\uff1a\u5728\u4e00\u500b\u52a0\u6b0a\u5716\u7684\u6240\u6709\u53ef\u80fd\u64f4\u5f35\u6a39\u4e2d\uff0c\u6240\u6709\u908a\u7684\u52a0\u6b0a\u7e3d\u548c\u6700\u5c0f\u7684\u64f4\u5f35\u6a39<\/p>\n\n\n\n<p>\u6c42\u6cd5\uff1a\u53ef\u7528kruskal\u7684\u6f14\u7b97\u6cd5\uff1a\u6b64\u70bagreedy method\uff0c\u6b65\u9a5f\u5982\u4e0b\uff1a<br>1\u7531\u908a\u96c6\u5408\u4e2d\u627e\u51fa\u6700\u5c0f\u52a0\u6b0a\u908a\uff0c<br>2\u6aa2\u67e5\u9019\u500b\u908a \u52a0\u5165tree\u5f8c\u662f\u5426\u6703\u5f62\u6210\u8ff4\u8def\uff0c\u82e5\u662f\u5247\u6368\u68c4\u5426\u5247\u4fdd\u7559\u5728tree\u5167<br>3\u91cd\u89861\uff0c2\u76f4\u5230\u627e\u5b8c\u6240\u6709\u908a\u6216\u908a\u96c6\u5408\u70ba\u7a7a\u70ba\u6b62<br>\u82e5\u7528\u6700\u5c0f\u5806\u7a4d\u7d50\u69cb\u8868\u793a\u5404\u908a\u52a0\u6b0a\uff0c\u5c0dn\u500b\u9edee\u500b\u908a\u7684\u9023\u901a\u5716\uff0c\u5247\u70babigO(e log2(e))<\/p>\n\n\n\n<p>&#8230;&#8230;&#8230;&#8230;<\/p>\n\n\n\n<p><strong>\u6700\u77ed\u8def\u5f91<\/strong>\uff1a<br>\u5f9e\u9ede\u5230\u53e6\u4e00\u9ede\u9593\u6240\u6709\u53ef\u80fd\u8def\u5f91\u4e2d\uff0c\u6240\u6709\u908a\u52a0\u6b0a\u7e3d\u5408\u6700\u5c0f\u7684\u8def\u5f91<\/p>\n\n\n\n<p>\u5f9e\u4e00\u9ede\u5230\u5176\u5b83\u6240\u6709\u9ede\u7684\u6700\u77ed\u8def\u5f91\u8207\u8ddd\u96e2<br>dijkstra\u7684\u6f14\u7b97\u6cd5\uff1a\u4f7f\u7528\u76f8\u9130\u77e9\u9663\u5247\u70babigO(N^2)<br>\u8cc7\u6599\u7d50\u69cb\uff1adistance[1-n]\u8868\u793a\u5230\u9054\u9edei(\u8d77\u59cb\u9ede)\u7684\u6700\u77ed\u8ddd\u96e2(\u52a0\u6b0a)\uff0cpath[1-n]\u8868\u793a\u9edei(\u8d77\u59cb\u9ede)=\u9edej\u5230\u9edei\u6240\u9054\u6210<br>\u6f14\u7b97\u6cd5\uff1a<br>procedure shortestpath(i){<br>\u3000for(j:=1 to n)do{distance[j]:=cost[i][j];path[j]:=j}<br>\u3000visit[i]:=true;<br>\u3000for(all vertex j\u5c6c\u65bcneighbor(i))path[j]:=i;<br>\u3000for(step:=1 to (n-1))do{<br>\u3000\u3000for(all vertex j\u5c6c\u65bcnot visit[j])choose a vertex K with a minimal distance; \/\/\u6bcf\u6b21\u57f7\u884c\u90fd\u662f\u9084\u6c92\u53c3\u89c0\u904e\u7684\u9ede<br>\u3000\u3000visit[k]:=true; \/\/\u8a18\u5728visit\u5167\u8868\u53c3\u89c0\u904e<br>\u3000\u3000for(all vertex j\u5c6c\u65bcneighbor(k)){ \/\/\u9019\u88e1\u6700\u591a\u8dd1n-1\u6b21,<br>\u3000\u3000\u3000new_distance:=distance[k]+cost[k][j];<br>\u3000\u3000\u3000if(new_distance &lt; istance[j]){<br>\u3000\u3000\u3000\u3000distance[j]:=new_distance;<br>\u3000\u3000\u3000\u3000path[j]=k;<br>\u3000\u3000\u3000}<br>\u3000\u3000}<br>\u3000}<br>}<\/p>\n\n\n\n<p>\u4efb\u610f\u5169\u9ede\u9593\u7684\u6700\u77ed\u8def\u5f91\u8207\u8ddd\u96e2<br>\u91cd\u8986\u57f7\u884cdijkstra\u7684\u6f14\u7b97\u6cd5n\u6b21\u5373\u53ef\uff0c\u4f7f\u7528\u76f8\u9130\u77e9\u9663\u5247\u70babigO(N^3)<br>dynamic programming(\u52d5\u614b\u898f\u756b\u6cd5\u8a2d\u8a08)\uff0c\u53ef\u7c21\u55ae\u5f97\u5230\uff0c\u4f46\u540c\u6a23\u70babigO(n^3)<\/p>\n\n\n\n<p>&#8230;&#8230;<\/p>\n\n\n\n<p><strong>aov\u7db2\u8def(activity on vertex network)<\/strong><br>\u7528\u9ede\u8868activity\u5de5\u4f5c\uff0c\u908a\u8868\u5de5\u4f5c\u9593\u8655\u7406\u512a\u5148\u95dc\u4fc2\u7684\u6709\u5411\u5716\uff0c\u56e0\u5de5\u4f5c\u9593\u6709\u5148\u5f8c\u95dc\u4fc2\u6240\u4ee5\u4e0d\u80fd\u6709\u8ff4\u8def\u5b58\u5728\uff0c\u4e14\u64c1\u6709topological order(\u62d3\u6a38\u9806\u5e8f)<br>topological order ex:\u82e5\u908a\u70ba\u8868\u793a\u5fc5\u9808\u5148\u505avi\u624d\u80fd\u505avj<br>\u7528\u9014\uff1a\u61c9\u7528\u5728\u6709\u524d\u5f8c\u7dda\u6027\u95dc\u6027\uff0c\u5982\u8868\u793a\u4e00\u500b\u7531\u591a\u500b\u5de5\u4f5c\u6240\u7d44\u6210\u7684\u5c08\u6848\u7684\u898f\u5283\uff0cos\u8868\u793a\u591a\u500b\u57f7\u884c\u7684\u5de5\u4f5c\u5143\u9593\u7684\u7b49\u5f85\u5716\uff0c\u4e0d\u80fd\u6709\u8ff4\u8def\u7684\u7d44\u5408\u96fb\u8def<br>\u6f14\u7b97\u6cd5\u70ba\u5148\u627e\u51fa\u9032\u5165\u5206\u652f\u5ea6\u70ba0\u7684\u9ede<\/p>\n\n\n\n<p><strong>aoe\u7db2\u8def(activity on edge network)<\/strong><br>\u81e8\u754c\u5de5\u4f5c:\u5de5\u4f5c\u6700\u65e9\u958b\u59cb\u6642\u9593=\u5de5\u4f5c\u6700\u665a\u958b\u59cb\u6642\u9593<br>critical path(\u81e8\u754c\u8def\u5f91):\u8d77\u59cb\u5230\u7d50\u675f\u7684\u9802\u9ede\u7686\u7531\u81e8\u754c\u5de5\u4f5c\u6240\u7d44\u6210\u7684\u8def\u5f91<br>\u6c42\u6cd5\uff1a<br>1\u5148\u6c42\u524d\u9032\u968e\u6bb5\u5728\u6c42\u5f8c\u9000\u968e\u6bb5\uff0c\u53ca\u53ef\u5f97\u5230\u5404\u9ede\u7684\u6700\u65e9\u53ca\u6700\u665a\u958b\u59cb\u6642\u9593<br>2\u627e\u51fa\u5404\u5de5\u4f5c\u7684\u6700\u65e9e(ai)\u8207\u6700\u665al(ai)\u958b\u59cb\u6642\u9593\uff0c\u82e5\u76f8\u540c\u5247\u70ba\u81e8\u754c\u5de5\u4f5c<\/p>\n\n\n\n<p>\u9802\u9ede\u6700\u65e9\u8207\u6700\u665a\u958b\u59cb\u6642\u9593\u8a08\u7b97<br>forward stage(\u524d\u9032\u968e\u6bb5)\uff1a\u5f9e\u8d77\u59cb\u9802\u9ede\u5230\u7d50\u675f\u9802\u9ede\uff0c\u8a08\u7b97\u5404\u9ede\u6700\u65e9\u958b\u59cb\u6642\u9593\uff0c\u4e5f\u7a31\u6700\u5927\u968e\u6bb5<br>\u6c42\u6cd5\uff1a\u8a2d\u5de5\u4f5cai\u7528\u5169\u9ede\u8868\u793a\u6642\uff0c\u9edeq\u7684\u6700\u65e9\u958b\u59cb\u6642\u9593\uff1d\u9edep\u6700\u65e9\u958b\u59cb\u6642\u9593\uff0bai\u9577\u5ea6\uff0c\u82e5\u9edeq\u6709\u591a\u908a\u9032\u5165\u5247\u8a2d\u5b9a\u5176\u4e2d\u6700\u5927\u8005<br>backward stage(\u5f8c\u9000\u968e\u6bb5)\uff1a\u5f9e\u7d50\u675f\u9802\u9ede\u5230\u8d77\u59cb\u9802\u9ede\uff0c\u8a08\u7b97\u5404\u9ede\u6700\u665a\u958b\u59cb\u6642\u9593\uff0c\u4e5f\u7a31\u6700\u5c0f\u968e\u6bb5<br>\u6c42\u6cd5\uff1a\u8a2d\u5de5\u4f5cai\u7528\u5169\u9ede\u8868\u793a\u6642\uff0c\u9edep\u7684\u6700\u665a\u958b\u59cb\u6642\u9593\uff1d\u9edeq\u7684\u6700\u665a\u958b\u59cb\u6642\u9593\uff0dai\u9577\u5ea6\uff0c\u82e5\u9edep\u6709\u591a\u908a\u9032\u5165\u5247\u8a2d\u5b9a\u5176\u4e2d\u6700\u5c0f\u8005<\/p>\n\n\n\n<p>\u908a(\u5de5\u4f5c)\u6700\u65e9e(ai)\u6700\u665al(ai)\u958b\u59cb\u6642\u9593\u8a08\u7b97\uff1a\u53ef\u7531\u9802\u9ede\u6700\u65e9e(vi)\u6700\u665al(vi)\u958b\u59cb\u6642\u9593\u63a8\u5c0e<br>\u6c42\u6cd5\uff1a\u8a2d\u5de5\u4f5cai\u7528\u5169\u9ede\u8868\u793a\u6642\uff0ce(ai)=\u9edep\u6700\u65e9\u958b\u59cb\u6642\u9593\uff0cl(ai)=\u9edeq\u7684\u6700\u665a\u958b\u59cb\u6642\u9593\uff0dai\u9577<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u57fa\u672c\u540d\u8a5eeulerian path(\u5c24\u62c9\u8def\u5f91),euleri &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[15],"tags":[],"class_list":["post-564","post","type-post","status-publish","format-standard","hentry","category-algorithm"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/comments?post=564"}],"version-history":[{"count":0,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/564\/revisions"}],"wp:attachment":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/media?parent=564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/categories?post=564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/tags?post=564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}