摘要:圖的基本算法算法算法算法算法算法最小生成樹拓撲排序圖的和算法算法為稠密陣所以用鄰接矩陣存儲用于記錄每一個點距離第一個點的距離用于記錄
#include #include #include using namespace std;const int N=510,M=10010;int dist[N],backup[N];int n,m,k;struct edge{ int a,b,w;}edges[M];int bellman_ford(){ memset(dist,0x3f,sizeof(dist)); dist[1]=0; for(int i=0;i<k;i++){ memcpy(backup,dist,sizeof dist); for(int j=1;j<=m;j++){ int a=edges[j-1].a,b=edges[j-1].b,w=edges[j-1].w; dist[b]=min(dist[b],backup[a]+w); } } //if(dist[n]>0x3f3f3f3f/2)return -1; return dist[n];}int main(){ cin>>n>>m>>k; for(int i=0;i<m;i++){ int a,b,w; cin>>a>>b>>w; edges[i]={a,b,w}; } int t=bellman_ford(); if(t>0x3f3f3f3f/2)puts("impossible"); else cout<<t; return 0;}
#include #include #include using namespace std;const int N=510;int g[N][N]; //為稠密陣所以用鄰接矩陣存儲int dist[N]; //用于記錄每一個點距離第一個點的距離bool st[N]; //用于記錄該點的最短距離是否已經確定int n,m;int Dijkstra(){ memset(dist,0x3f,sizeof dist); dist[1]=0; for(int i=0;i<n;i++){ int t=-1; for(int j=1;j<=n;j++){ if(!st[j]&&(t==-1||dist[t]>dist[j])) t=j; } st[t]=true; for(int u=1;u<=n;u++){ dist[u]=min(dist[u],dist[t]+g[t][u]); } } if(dist[n]==0x3f3f3f3f)return -1; return dist[n];}int main(){ cin>>n>>m; memset(g,0x3f,sizeof g); //初始化圖 因為是求最短路徑 //所以每個點初始為無限大 while(m--) { int x,y,z; cin>>x>>y>>z; g[x][y]=min(g[x][y],z); //如果發生重邊的情況則保留最短的一條邊 } cout<<Dijkstra()<<endl; return 0;}
#include #include #include using namespace std;const int N=210;int g[N][N];int m,n,k;int main(){ cin>>n>>m>>k; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(i==j)g[i][j]=0; else g[i][j]=999999; for(int i=0;i<m;i++){ int a,b,c; cin>>a>>b>>c; g[a][b]=min(g[a][b],c); } for(int v=1;v<=n;v++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(g[i][j]>g[i][v]+g[v][j]) g[i][j]=g[i][v]+g[v][j]; } } } while(k--){ int x,y; cin>>x>>y; if(g[x][y]>= 900000)printf("impossible/n"); else cout<<g[x][y]<<endl; } return 0;}
#include #include #include #include using namespace std;const int N=1e5+10;int e[N],ne[N],h[N],w[N],idx;int n, m;int dist[N];bool st[N];void add(int a,int b,int c){ e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;}int spfa(){ memset(dist,0x3f,sizeof dist); dist[1]=0; queue<int>q; q.push(1); st[1]=true; while(!q.empty()){ int t=q.front(); q.pop(); st[t]=false; for(int i=h[t];i!=-1;i=ne[i]){ int j=e[i]; if(dist[j]>dist[t]+w[i]){ dist[j]=dist[t]+w[i]; if(!st[j]){ q.push(j); st[j]=true; } } } } //if(dist[n]==0x3f3f3f3f)return -1; return dist[n];}int main(){ memset(h,-1,sizeof(h)); cin>>n>>m; for(int i=0;i<m;i++){ int a,b,c; cin>>a>>b>>c; add(a,b,c); } int t=spfa(); if(t==0x3f3f3f3f)puts("impossible"); else cout<<t; return 0;}
#include #include #include using namespace std;const int N=510;int n,m;int g[N][N],dist[N];bool st[N];int prim(){ memset(dist,0x3f,sizeof dist); int ans=0; for(int i=1;i<=n;i++){ int t=-1; for(int j=1;j<=n;j++){ if(!st[j]&&(t==-1||dist[j]<dist[t])) t=j; } st[t]=true; if((i-1)&&dist[t]==0x3f3f3f3f)return 0x3f3f3f3f; if(i-1) ans+=dist[t]; for(int v=1;v<=n;v++){ dist[v]=min(dist[v],g[t][v]); } } return ans;}int main(){ memset(g,0x3f,sizeof g); cin >> n >> m; while(m--){ int a,b,c; cin>>a>>b>>c; g[a][b]=g[b][a]=min(g[a][b],c); } int t=prim(); if(t==0x3f3f3f3f)cout<<"impossible"; else cout<<t; return 0;}
#include #include using namespace std;const int N=1e5+10;int e[N],ne[N],h[N],idx;int n,m;int q[N],d[N];void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++;}bool topsort(){ int hh=0,tt=-1; for(int i=1;i<=n;i++){ if(d[i]==0)q[++tt]=i; } while(hh<=tt){ int t=q[hh++]; for(int i=h[t];i!=-1;i=ne[i]){ int j=e[i]; d[j]--; if(d[j]==0) q[++tt]=j; } } return tt==n-1;}int main(){ memset(h,-1,sizeof h); cin>>n>>m; for(int i=0;i<m;i++){ int a,b; cin>>a>>b; add(a,b); d[b]++; } if(topsort()){ for(int i=0;i<n;i++){ cout<<q[i]<<" "; } } else{ cout<<-1; } return 0;}
#define _CRT_SECURE_NO_WARNINGS 1#include #include #include using namespace std;//dfs求島嶼面積const int N = 1100;int arr[N][N], book[N][N], sum = 1, m, n, x, y;void dfs(int x, int y) { int dx[4] = { 1,0,-1,0 }; int dy[4] = { 0,1,0,-1 }; int ddx, ddy; for (int i = 0;i < 4;i++) { ddx = x + dx[i]; ddy = y + dy[i]; if (ddx > m || ddx<1 || ddy>n || ddy < 1) continue; if (arr[ddx]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124093.html
摘要:數據結構程序數據結構算法數據結構基本概念數據的邏輯結構反映數據元素之間的關系的數據元素集合的表示。這兩部分信息組成數據元素的存儲映象,稱為結點。 本文涉及更多的是概念,代碼部分請參考之前寫過的 2 篇博客 基于 Javascript 的排序算法 基于 javascript 的基本數據結構和查找算法 本文主要是基礎的數據結構和算法概念,可能部分地方會涉及更高級的算法和算法,具體內容以...
摘要:近日它們交鋒的戰場就是動態計算圖,誰能在這場戰爭中取得優勢,誰就把握住了未來用戶的流向。所以動態框架對虛擬計算圖的構建速度有較高的要求。動態計算圖問題之一的多結構輸入問題的高效計 隨著深度學習的發展,深度學習框架之間競爭也日益激烈,新老框架紛紛各顯神通,想要在廣大DeepLearner的服務器上占據一席之地。近日它們交鋒的戰場就是動態計算圖,誰能在這場戰爭中取得優勢,誰就把握住了未來用戶的流...
摘要:樹是一副無環連通圖。互不相連的樹組成的集合稱為森林。表示無向圖的數據類型圖的基本操作的兩個構造,得到頂點數和邊數,增加一條邊。該方法不符合第一個條件,上百萬個頂點的圖是很常見的空間不滿足。 四種重要的圖模型: 無向圖(簡單連接) 有向圖(連接有方向性) 加權圖(連接帶有權值) 加權有向圖(連接既有方向性又帶有權值) 無向圖 定義:由一組頂點和一組能夠將兩個頂點相連的邊組成。 特殊:...
摘要:在等機構新提出的論文中,其采用了大規模數據集與深度神經網絡學習圖像的自然結構,從而進一步分離圖像的前景與背景。一張手動摳圖的前景圖擁有簡單背景作為輸入。對于每一張測試圖像,按照降序從第列到第列顯示了度量下的排名結果排名到。 摳圖,一直是一件體力活,它需要大量的操作與時間。而傳統摳圖算法主要是以色彩為特征分離前景與背景,并在小數據集上完成,而這就造成了傳統算法的局限性。在 Adobe 等機構新...
摘要:圖關聯矩陣在關聯矩陣表示的圖中,矩陣的行表示頂點,列表示邊。如圖,頂點數是,邊的數量是,用鄰接矩陣表示圖需要的空間是,而使用關聯矩陣表示圖需要的空間是。廣度優先搜索算法數據結構是隊列。深度優先搜索算法數據結構是棧。 定義 圖和散列表、二叉樹一樣,是一種非線性數據結構。如圖1所示,圖由一系列頂點以及連接頂點的邊構成。由一條邊連接在一起的頂點成為相鄰頂點,比如A和B、A和D是相鄰的,而A和...
閱讀 2892·2021-11-23 09:51
閱讀 3404·2021-11-22 09:34
閱讀 3305·2021-10-27 14:14
閱讀 1503·2019-08-30 15:55
閱讀 3345·2019-08-30 15:54
閱讀 1066·2019-08-30 15:52
閱讀 1887·2019-08-30 12:46
閱讀 2845·2019-08-29 16:11