[アルゴリズム] 最短経路ダイクストラを探す, フロイド
アップデート 25/05/2014: あなたのコメントのいくつかの操作を行いますので、私はより多くを書いた 1 ところでダイクストラのアルゴリズムプログラムの構造および機能も若干明るく、より正確にするためのコードを改訂^^.
アップデート 27/09/2014: ここでは、アルゴリズムの追加のパスカルコード: http://ideone.com/c7J0dq
コンテンツ
ダイクストラアルゴリズム
フロイドアルゴリズム
のための高度なコード 2 アルゴリズム
アップデート 14/06/2014: シミュレーションアルゴリズムダイクストラ
この記事では唯一の最短経路ダイクストラとフロイドを見つけるアルゴリズムを指し、, 私が説明したり、定義されていませんいくつかの関連用語, あなたは本の中やインターネット上で見つける.
シングルソースの問題は、最短経路問題は、そのような最小の道を構成するエッジの重みの合計は、2つの頂点間のパスを見つけることです. それとも、数学的にそれを置くために:
シングル連結グラフのために, 加重G =(ザ·,と). 距離dを探す(ザ·,B) 与えられた頂点からGの頂点へとAからBへの最短経路を見つけるのすべてのB.
記事のタイトルとして、, 私たちは学習します 2 グラフの隣接行列構造を使用して解決するためのアルゴリズム(我々は、グラフの重みが負でない考える注意).
n個の頂点を持つグラフの隣接行列は正方行列G nは列の行の数である. G[で][J] 私から頂点jのトップへのパスの長さ. 無向グラフGを考える[で][J] = G[J][で]. 上から自身への長さです 0 (G[で][で] = 0). 間の場合、 2 iおよびjは、グラフのエッジは、G方法は存在しない[で][J] =インフィニティ (∞). しかし、コンピュータの性能は、値に設定されている∞ 1 定数が非常に大きいまたは行列の合計値であり、 (エッジの全長).
1. ダイクストラアルゴリズム
ダイクストラのアルゴリズムは有しについて 2 タイプはから最短経路を見つけることである 1 ソースがトップに 1 トップ先からの最短経路を見つける 1 グラフの左上にソース頂点, そしてここで私はものについてお話します 1. (あなたはネット上で見つけるか、単にラインを変更することができます第二種 同時に (S[B] == 0) (現在 43 コードによる 1 & 現在 76 コードによる 2) ループブラウザから 0 n-1のすべての頂点を見つけるために起こっている).
– 使用 1 レン·アレイ[] – のみ[で] 私を頂点する頂点までの最短距離である.
– 使用 1 特別な頂点IマーキングプレートS (ピーク電流I当時から私へのパスが最短).
– アレイPを使用して[] マークされたパス. P[J] I = I jは、先に最短経路のピークである場合.
– トップペアは決してないための非常に貴重なリセット.
– 極めてにおける他のピークにアジアからのすべての方法を初期化します.
– =プライマリからパスを初期化する 0.
– グラフVのすべての頂点を見る
+ から私へのパスは、Sに含める最短であることを私はしないSでトップの検索. あなたはまだ行くことができピークの頂点を承認したあらゆる手段を見つけることができない場合=トップ先を見つけていない> 歩くことができませんでした.
+ あなたが頂点を見つけた場合、私がjではないS内にすべての頂点を閲覧する. レンの場合[で] + G[で][J] < のみ[J] (ここで、G[で][J] 私はjは頂点に頂点からの距離である) その後レンを割り当てる[J] =レン[で] + G[で][J]; とマークされたパスP[J] = I.
注意: Cであるため, 配列の開始 0. ピークを計算するとき、したがって、意志上から 0 上部n-1の. しかし、それは上から表示するように残っている 1 Nとトップとトップエンドinput.inpファイルにから計算されます 1 nに. 私たちは、計算や旅行先端の先端を削減する必要がある前に、そのためのコード 1 ユニット. 道路のピークを大きくする必要が検索する際の計算結果、完了後 1 適切に表示するためのユニット (例えば、我々はトップからパスを計算したい 4 トップへ 8, トップ 4 位置に対応する 3 配列内の, トップ 8 対応する位置 7 私たちは削減する必要がある 4 ダウン 3, 8 ダウン 7 計算する. あなたが道を見つけたら, と仮定して 3 -> 5 -> 4 -> 7 ような場所にある必要があります 4 -> 6 -> 5 -> 8).
当社は、以下のチャートに従って練習を行くよ 2 コードは右でやってメインコンテンツに従っている:
ファイル input.inp: 最初の行は、 8 ポイント, 離れてポイントから 4 ポイントへ 8. マトリックス8×8 下のグラフの隣接行列である.
8 4 8 0 3 5 2 0 0 0 0 3 0 1 0 7 0 0 0 5 1 0 4 0 1 0 0 2 0 4 0 0 3 6 0 0 7 0 0 0 2 0 3 0 0 1 3 2 0 4 6 0 0 0 6 0 4 0 5 0 0 0 0 3 6 5 0
* メイン内のコード
このコードは、修正されたから、いくつかのバグを修正した。 コード日前 (または リンクの冗長性).
#include <stdio.h> #include <stdlib.h> #define INP "input.inp" #define OUT "output.out" int main() { FILE *fi = fopen(INP, "r"); FILE *fo = fopen(OUT, "w"); int n, a, b, i, sum = 0; // nhap du lieu tu file input fscanf(fi, "%d%d%d", &n, &a, &b); int G[n][n]; int S[n], Len[n], P[n]; // nhap ma tran va tinh gia tri vo cung (sum) for (i = 0; i < n; i++) for (int j = 0; j < n; j++) { fscanf(fi, "%d", &G[i][j]); sum += G[i][j]; } // dat vo cung cho tat ca cap canh khong noi voi nhau for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i != j && G[i][j] == 0) G[i][j] = sum; } } /* Do mang tinh tu G[0][0] nen can giam vi tri di 1 don vi de tinh toan cho phu hop*/ a--; b--; for (int i = 0; i < n; i++) { Len[i] = sum; // khoi tao do dai tu a toi moi dinh la vo cung S[i] = 0; // danh sach cac diem da xet P[i] = a; // dat diem bat dau cua moi diem la a } Len[a] = 0; // dat do dai tu a -> a la 0 // tim duong di ngan nhat tu 1 dinh den moi dinh khac thi thay bang vong for: //for (int k = 0; k < n; k++) while (S[b] == 0) { // trong khi diem cuoi chua duoc xet for (i = 0; i < n; i++) // tim 1 vi tri ma khong phai la vo cung if (!S[i] && Len[i] < sum) break; // i >=n tuc la duyet het cac dinh ma khong the tim thay dinh b -> thoat if (i >= n) { printf("done dijkstra\n"); break; } for (int j = 0; j < n; j++) { // tim diem co vi tri ma do dai la min if (!S[j] && Len[i] > Len[j]) { i = j; } } S[i] = 1; // cho i vao danh sach xet roi for (int j = 0; j < n; j++) { // tinh lai do dai cua cac diem chua xet if (!S[j] && Len[i] + G[i][j] < Len[j]) { Len[j] = Len[i] + G[i][j]; // thay doi len P[j] = i; // danh dau diem truoc no } } } printf("done dijkstra\n"); /* Do ta dang tinh toan tu dinh 0 nen muon hien thi tu dinh 1 thi can dung i + 1 de phu hop */ printf("start find path\n"); if (Len[b] > 0 && Len[b] < sum) { fprintf(fo, "Length of %d to %d is %d\n", a + 1, b + 1, Len[b]); // truy vet while (i != a) { fprintf(fo, "%d <-- ", i + 1); i = P[i]; } fprintf(fo, "%d", a + 1); } else { fprintf(fo, "khong co duong di tu %d den %d\n", a + 1, b + 1); } printf("done find path\n"); fclose(fi); fclose(fo); printf("done - open file output to see result\n"); return 0; }
* 各関数のコード
コード内の関数を含むように:
– readDataメソッド 実装は、入力ファイルを読み取り.
– ダイクストラ アルゴリズムの実装
– バック 実装は、文字列が見つけるための方法です返す
– outResult 出力ファイルの実施結果
#include <stdio.h> #include <stdlib.h> #include <cstring> #define INP "input.inp" #define OUT "output.out" // read data in file input int readData(int ***G, int *n, int *a, int *b) { FILE *fi = fopen(INP, "r"); if (fi == NULL) { printf("file input not found!\n"); return 0; } printf("start read file\n"); fscanf(fi, "%d %d %d", n, a, b); *G = (int **) malloc((*n) * sizeof(int)); for (int i = 0; i < *n; i++) { (*G)[i] = (int *) malloc((*n) * sizeof(int)); for (int j = 0; j < *n; j++) { int x; fscanf(fi, "%d", &x); (*G)[i][j] = x; } } fclose(fi); printf("done read file\n"); return 1; } // thuat toan dijkstra int dijkstra(int **G, int n, int a, int b, int P[]) { /* Do mang tinh tu G[0][0] nen can giam vi tri di 1 don vi de tinh toan cho phu hop*/ a--; b--; printf("start dijkstra\n"); int* Len = (int *) malloc(n * sizeof(int)); int* S = (int *) malloc(n * sizeof(int)); int sum = 0; // gia tri vo cung // tinh gia tri vo cung (sum) for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { sum += G[i][j]; } } // dat vo cung cho tat ca cap canh khong noi voi nhau for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i != j && G[i][j] == 0) G[i][j] = sum; } } for (int i = 0; i < n; i++) { Len[i] = sum; // khoi tao do dai tu a toi moi dinh la vo cung S[i] = 0; // danh sach cac diem da xet P[i] = a; // dat diem bat dau cua moi diem la a } Len[a] = 0; // dat do dai tu a -> a la 0 int i; // tim duong di ngan nhat tu 1 dinh den moi dinh khac thi thay bang vong for: //for (int k = 0; k < n; k++) while (S[b] == 0) { // trong khi diem cuoi chua duoc xet for (i = 0; i < n; i++) // tim 1 vi tri ma khong phai la vo cung if (!S[i] && Len[i] < sum) break; // i >=n tuc la duyet het cac dinh ma khong the tim thay dinh b -> thoat if (i >= n) { printf("done dijkstra\n"); return 0; } for (int j = 0; j < n; j++) { // tim diem co vi tri ma do dai la min if (!S[j] && Len[i] > Len[j]) i = j; } S[i] = 1; // cho i vao danh sach xet roi for (int j = 0; j < n; j++) { // tinh lai do dai cua cac diem chua xet if (!S[j] && Len[i] + G[i][j] < Len[j]) { Len[j] = Len[i] + G[i][j]; // thay doi len P[j] = i; // danh dau diem truoc no } } } printf("done dijkstra\n"); return Len[b]; } // truy vet duong di void back(int a, int b, int *P, int n, char *path) { //char *path = (char *) malloc((n * 10) * sizeof(char)); /* Do mang tinh tu G[0][0] nen can giam vi tri di 1 don vi de tinh toan cho phu hop*/ a--; b--; printf("start find path\n"); int i = b; int point[n]; // danh sach cac dinh cua duong di int count = 0; /* Do ta dang tinh toan tu dinh 0 nen muon hien thi tu dinh 1 thi can dung i + 1 de phu hop */ point[count++] = i + 1; while (i != a) { i = P[i]; point[count++] = i + 1; } strcpy(path, ""); char temp[10]; for (i = count - 1; i >= 0; i--) { sprintf(temp, "%d", point[i]); strcat(path, temp); if (i > 0) { sprintf(temp, " --> "); strcat(path, temp); } } printf("done find path\n"); } void outResult(int len, char* path) { FILE *fo = fopen(OUT, "w"); if (len > 0) { fprintf(fo, "\nLength of %c to %c is %d\n", path[0], path[strlen(path) - 1], len); } fprintf(fo, "path: %s\n", path); fclose(fo); } int main() { int **G, n, a, b, len; if (readData(&G, &n, &a, &b) == 0) { return 0; } char *path = (char *) malloc((10 * n) * sizeof(char)); int P[n]; len = dijkstra(G, n, a, b, P); if (len > 0) { back(a, b, P, n, path); outResult(len, path); } else { char *path = (char *) malloc((n * 10) * sizeof(char)); sprintf(path, "khong co duong di tu %d den %d\n", a, b); outResult(len, path); } printf("done - open file output to see result\n"); return 0; }
探しているコードは少し長いようだが、その後、テオロングボールを読み込むときに行います@@ =)).
2. フロイドアルゴリズム
このアルゴリズムは、頂点のすべてのペア間の最短経路を見つけることが私たちを可能にする.
k個の頂点が、私はJを頂点に、頂点からの最短経路上にある場合は、私からjへとjからjへの距離は、私からjへとjからJ対応への最短経路である. そこで我々は、頂点のすべての対の間の最短経路の長さを保存するために、行列Aを使用して.
– 当初、我々はセット[で,J] = C[で,J], 最初はダイレクトパスの長さであるコンテナ (すべてでトップの上に行かない).
– そして、n個の反復を実行する, 最初の反復kの後, ma trận A sẽ chứa độ dài đường đi ngắn nhất giữa mọi cặp đỉnh chỉ đi qua các đỉnh thuộc tập .comment-content 1. このような, n個の反復の後、我々は行列Aはグラフの頂点のすべてのペア間の最短経路の長さが含まれ得る.
– Akは後で反復k行列表記である, すなわちAkは[で,J] là độ dài đường đi ngắn nhất từ i đến j chỉ đi qua các đỉnh thuộc .comment-content 0. もし[で,J] 以下の式に従って計算: もし[で,J] = min .comment-body 9.
– 反復プロセスでは、トレースパスを保存する必要が, すなわち最短経路は、頂点を通過する. その後、我々は、サブアレイPを使用[n×nの], そのPで[で,J] J kにIからK最短経路がピークを通過する場合、最大トップ. 当初はP[で,J]= 0すべてのiについて,J, その後最短経路は、ダイレクトパスであるため、, すべてでトップの上に行かない.
コードアルゴリズム:
void Floyd (int a, int b) { int max = tongthiethai(); for (int i=0; i<n; i++) for (int j=0; j<n; j++) { if (G[i][j]) A[i][j] = G[i][j]; else A[i][j] = max; P[i][j] = -1; } for (int k=0; k<n; k++) // lap n lan { for (int i=0; i<n; i++) // thay doi do dai duong di cua cac dinh for (int j=0; j<n; j++) if (A[i][j] > A[i][k] + A[k][j]) { A[i][j] = A[i][k] + A[k][j]; P[i][j] = k ; } } }
どのように完全なプログラムを構築することはダイクストラのアルゴリズムに似ている.
上級コード
これは選択のためのコードです 1 で 2 下の写真の結果としてプロセスに従い、アルゴリズムや出力ファイル またはバックアップリンク
ファイルinput.inp:
8
B C D E F G H
0 3 5 2 0 0 0 0
3 0 1 0 7 0 0 0
5 1 0 4 0 1 0 0
2 0 4 0 0 3 6 0
0 7 0 0 0 2 0 3
0 0 1 3 2 0 4 6
0 0 0 6 0 4 0 5
0 0 0 0 3 6 5 0
メニューコンソール
出力ダイクストラ
出力フロイド
私は自分の道を見つけるあらゆるので割引かれる融資を実行して、なぜ私をホイアン. ベルベットステージ手は、まだある.
@@あなたは慎重に入力ファイルをオフラインでコードをレビュー. 彼のランニングOK.
ああ、あなたがこの上で私のポストコードの完全なランタイムエラーをコピーする方法
[エラー] ℃:\ユーザー [管理ダウンロード ideone_DpaGPW.cpp:167: E2313定数式は、関数ダイクストラで必要(GRAPH,int型,int型)
[エラー] ℃:\ユーザー [管理ダウンロード ideone_DpaGPW.cpp:283: 機能フロイドに必要なE2313定数式(GRAPH,int型,int型)
あなたはまだ、そのコードをコピー? メールファイルへの彼のリターンのために nguyenvanquan7826@gmail.com オフライン自分の目で確かめてください.
インテリジェントは、その前にメールを送信します
私は、受信しました, 微細で実行中のコードがつかみます, 問題はありません. おそらくあなたは、C-freeを使用しますので不完全か何かエラー. オフライン表示用のTeamviewをオン. スカイ経由で私に連絡: nguyenvanquan7826
@@実施例1-最短経路を持っていない理由>4= 1<-2<-3<-4
ああそのせいで> 8の1-から彼のすべての例で. するつもりはありません 4 どこ.
私はそれはあなたが一般.INPで入力ファイルの.cppファイルとファイルに持っていることがわかっ登場し、プログラムを実行しますWHY 1 フォルダと. ありがとうございます
あなたは、ファイルの拡張子を確認しNHE, あなたのファイルを終了することが隠されている.txtの.INPではありません.
あなたはここでファイルの拡張子を確認するために現れます 勝利 7, ここで 勝利 10 NHE.
私はあなたが一般的.INPで入力ファイルの.cppファイルとファイルに持っていることを発見し、それが登場し、プログラムを実行します 1 フォルダと. ありがとうございます
あなたは、ファイルの正しいNHEの尾を見ます. ファイルの拡張子を隠すことができるとあなたのファイルは本当にinput.inp.txtです. あなたはそれを、この記事を参照してください.http://thuthuat.taimienphi.vn/cach-hien-duoi-file-trong-win-10-21939n.aspx
あなたはパスカルにコードを変更することができそうではありません? 知っている 99% 答えは次のようになります “私は非常に忙しい!” しかしまだあなたがに変わります願っています 1 初心者にも知識の普及をPascalで書かれたコードは、Cに堪能ではない.
お読みいただきありがとうございました.
私は今週、その中にパスカルコードを変換しようとするでしょう. Cảm ơn bạn đã quan tâm tới các bài viết trong blog và đặc biệt là tinh thần chia sẻ của bạn 🙂
あなたは、パスカルコードで右ここに見ることができます http://ideone.com/c7J0dq
どうもありがとうございました, VNは、毎日あなたのようなより多くの人々を転送します.
あなたのプログラミングを愛し、より多くのすぐに記事やコミュニティウィッシング.
Cảm ơn bạn 🙂 Mình sẽ cố gắng viết tốt hơn 😉
ブラザーはこれで私を助けて! 私は、授業のエッセイをやってる, 次のようにあなたの問題を投稿:
Đồ thị vô hướng G= .comment-body 8 DSに次のリストで与えられる. 節くれだった, VのV. 二つの経路アルゴリズムA1の構築(で,で) とA2(で,で) 共通のエッジなしと最短の全長はなるように.
私はまだ低迷が、どこ再び先生を開始するのか分からない. あなたは私をDUM助けホープ.
このエッセンスは、その最短経路を見つけることである.
A1 + 最短A2 A1およびA2短い最短. あなたはダイクストラを使用A1を見つける, A2, プロセスにおいて、各時間A2を見つける 1 A1の反対側を見ても何をオフラインにしていません.
あなたの先生に感謝
このアルゴリズムは、彼が、ヒープVS先生をしませんでした? 私はダイクストラヒープ非常に明確ではないよ. そうでない場合, 私は、DCを行うか、単にE kの先生のためにすることができます?
この彼はヒープでやった. これは、ヒープに対してLUN NEVERではない :D. Em thử search trên mạng xem có không 😀
押忍. 彼はより多くの私に尋ねた. カテゴリの 2, 私は言葉を見つけたい 1 トップ代わりにループの外に、私は再び先生がJを変更する必要が, あなたはどのように知っている必要があり、入力としてだけでなく、kは. さらに, DC子供たちはさよならの各部分上でコードを実行しないでください. それは先生を鎮圧しなければならないダイクストラセクションを開始するために実行する. 彼ができる唯一のE K先生DC?
から実行すると 1 他のすべての頂点の回転に頂点だけ上面全体が終了した閲覧用, 何かを追加する必要はありません.
各関数のコード、あなたは正常です建物を保つ.
金はあなたに感謝
私の友人は、あなたのJavaコードセクションKO DCについての詳細を説明することができ、Javaを使用して、このプロジェクトで行うti..minh自分を尋ねた
忘れる,,あなたは本当にありがとうございましnha..minhとあなたの助けに彼女を必要なもの
あなたが先に行く, 彼が助けたい場合 :で
あなたは自分自身を説明することができますシーケンスのDC芸術を実行していないダムコードセクション :((.あなたが行くあなたの電話番号を与える
アートでは、シーケンスを実行する方法です?
あなたが彼らに呼び出すことができるものは何もありません.
096.567.7826
thấy bạn trl cmt mà rơi nước mắt vì mừng 🙂
Làm gì đến mức đó 😀
ようこそグエン·ヴァン·クアン , 私は、次のような問題DC KOの答えを知っているあなたを招待することができます ?
座標系0xy , 以下の持っている
A1(586,363),A2(254,137),A3(467,516),A4(798,472),A5(599,213),A6(372,344),A7(146,412),
A8(818,346),A9(850,199),A10(314,260),A11(72,268),A12(731,57),A13(429,179),A14(499,81),
A15(89,169),A16(113,82),A17(904,59),A18(926,551),A19(54,20)
あるとし 2 すべてのセグメントが接続されており、無向されている
長ジョイント (リアルのタイプ) 間に 2 通常の数学の学習あたりの任意のタイプのDC
出発点 : A18(926,551)
パスの長さを示します (リアルのタイプ) 最短A18に由来し、残りのすべてのものを通過 (各頂点は、適切通過する必要があります 1 時間 )
このすべてのそれを使用すると、その後、別のアルゴリズムである. 私はどのようにその解決策を見てみます.
その詳細情報のあなたのアルゴリズムKについては本当にあまりにも無気力
あなたは、コードやアルゴリズムを理解していない? ダイクストラは、アートやフロイドを理解していない.
私は練習のベースラインアルゴリズムをしました,,,インタフェースは、それを好きになるでしょう?
これはあなたの唯一のオプションです. あなたがここにあなたのプログラムを参照することができます:
https://cachhoc.net/2014/06/14/java-thuat-toan-mo-phong-thuat-toan-dijkstra-tim-duong-di-ngan-nhat/
兄は、そのようなコードのJavaを持っていません? C eは何も知らない
DJK Javaの未知のCを学ぶ? それは平等にある, 他のロールは何ですか.
広告, eは、問題を抱えている : グラフkのサイクルPERTアルゴリズムで最長経路を見つける .. 直流K E広告ヘルプ?
Cái này anh chưa làm mà giờ cũng chưa có thời gian làm nữa 🙂 Em thông cảm nhá.
ああ、私のコメントを編集 1 あなたのコード内のビットが入力されます 2 キーボードからの点とのprintfのscanf CINとCOUTを移動したが実行されていない, あなたはすべてのオフラインでの自分自身を助ける
#含まれる
#含まれる
#含まれる
#INPを定義 “INPUT.TXT”
名前空間stdを使用して;
メインint型() {
FILE * Fiを=のfopen(“INPUT.TXT”, “R”);
int型のn, ザ·, B, で, 合計= 0;
COUT<>ザ·;
COUT<>B;
関数fscanf(ある, “%D%D%dの”, &N);
int型G[N][N];
int型S[N], のみ[N], P[N];
のために (I = 0; で < N; 私 )
のために (int型J = 0; J < N; J ) {
関数fscanf(ある, の "%D", &G[で][J]);
合計 = G[で][J];
}
のために (int型のi = 0; で < N; 私 ) {
のために (int型J = 0; J < N; J ) {
もし (で != J && G[で][J] == 0)
G[で][J] = SUM;
}
}
ザ·–;
B–;
のために (int型のi = 0; で < N; 私 ) {
のみ[で] = SUM;
S[で] = 0;
P[で] = A;
}
のみ[ザ·] = 0;
同時に (S[B] == 0) {
のために (I = 0; で < N; 私 )
もし (!S[で] && のみ[で] < 合計)
ブレーク;
のために (int型J = 0; Jのみ[J]) {
I = J;
}
}
S[で] = 1;
のために (int型J = 0; J < N; J ) {
もし (!S[J] && のみ[で] + G[で][J] 0 && のみ[B] < 合計) {
COUT<< " 上から最短経路」<<ザ· + 1<<" デン宮殿 "<<B + 1<<" "<< のみ[B];
同時に (で != A) {
COUT<< で + 1<<"<– ";
I = P[で];
}
COUT<< ザ· + 1;
} ほかに {
COUT<<「無軌道TU」<<ザ· + 1<<" "<< B + 1;
}
fcloseを(ある);
リターン 0;
}
あなたのレビュー 2 このラインNHA.
COUT<>ザ·;
COUT<>B;
CINは使用&GTされ;&GT;
coutのに使用され <<
その使用のcin>> とCOUT << しかし、あなたではないこと
私はちょうど走った、bは、プログラムは、それが服を動作を停止され、再び実行されませんだけで入力されます
彼の飛行、彼が入力され、bはレポートのみ動作しなくそれを行って
私はあなたがこれを書いたのを見たの上
COUT<>ザ·;
COUT<>B;
関数fscanf(ある, 「%D%D%D ", &N);
coutのポスト <>
唯一、各nに入る 1 %dはそうではありません, 3 チート…
私の友人は、ラインで自分を尋ねた
” のために (int型J = 0; Jのみ[J])
I = J;
その後 !S[J] 意味する?
!S[J] jがないとなる点、すなわち.
あなたが外の方法である理由
.comment-body 7
なぜ戻って輸出しないピーク発見ためには後方にそれを行う必要があります. 🙂
私は戻って変更することはできません
入手する, あなたは、関数オフラインとして上記のコードで参照してください。.
ウェイター, あなたはあなたの完全なコードを取得 http://pastebin.com/FiZzb3UH DEVC インタフェースで実行されているが、それはBYEのようではありませんコピー, それはマトリックスとして実行された. あなた先生DEVC 5.7.1. 彼はちょうどあなたとどこかでミスを犯した!
あなたは何ですか, このコードは、彼の記事の終わりに向かっていくつかのフォームとしてインターフェイスを実行されるよう? あなたはそれがどのように表示したい?
JavaコードKO先生に可能な転送.
他のJava何とC君. あなたはそれ、これを表示したい場合は:
https://cachhoc.net/2014/06/14/java-thuat-toan-mo-phong-thuat-toan-dijkstra-tim-duong-di-ngan-nhat/
Bの大井! Bあなたは直流K有向グラフを行うことができます????
行列の下半分に上半分があります 2 常に正しい方向k bの???
あなたを残してはいけません, あなただけに必要 2 別の半分は有向グラフであります. 例1-> 2が、 2 に行っていません 1 その後[1][2] = 2, とA[2][1] =インフィニティ.
このアルゴリズムのシミュレーションを行うことができます?? シミュレートすることにより、コードを説明?? Eラーニングプログラミングのヘルプを期待.
あなたは、ここにしてくださいを参照してくださいすることができます
https://cachhoc.net/2014/06/14/java-thuat-toan-mo-phong-thuat-toan-dijkstra-tim-duong-di-ngan-nhat/
トップ ! プレゼンテーションを楽しみました.
私の友人は、ファイルinput.inpはその後と、どこに作成方法を自分自身に尋ねました. 私は、Visual Studioを使用しました 2010 ランは、DCではない持っています
探偵input.inp 1 ファイルテキストthôi, ファイル.Cまたは.cppのと同じフォルダに
VSは、私は知りません. 私はそれを使用していません, あなただけしてみてください
OK. 彼の感謝のB NHE :で
自問してみてくださいこれは、そのアルゴリズムがショーをどこからどこまでの最短経路を見ずに、それだけで右W0からP6端にこの傲慢な表示を書いたウォーシャル . あなたはあなたの世帯のヘルプをk表示および編集することができます.
コード :
#含まれる
#含まれる
メインint型()
{
int型[10][10];
int型のK, N, で, J;
int型のp[10][10];
printfの(“サイジングnをクリックしてください:”); scanf関数(“%D”,&N);
//W]をクリックします[0] VAのP[0]
のために (I = 0; で<N; 私 ) のために (J = 0; JW[0]:\N”);
のために (I = 0; で<N; 私 )
{
のために (J = 0; JP[0]:\N”);
のために (I = 0; で<N; 私 )
{
のために (J = 0; J<N; J ) もし (P[で][J]!= 32) printfの("%3c",P[で][J]+64); 他のprintf("%3c",32);
printfの("\n");
}
getchは();
//wを計算する印刷[へ],P[へ] kに= 1.2、…,へ
のために (K = 0; におけるk nを[%D]: P[%D]:\N”,K 1、K 1);
のために (I = 0; で<N; 私 )
{
のために(J = 0; JW[で][へ]+で[へ][J])
{
で[で][J]= W[で][へ]+で[へ][J];
P[で][J]= P[で][へ];
}
printfの (“%3D”,で[で][J]);
}
printfの (” || “);
のために (J = 0; J<N; J )
もし(P[で][J]== 32) printfの("%3c",P[で][J]);
他のprintf("%3c",P[で][J]+64);
printfの("||"); printfの("\n");
}
}
}
//*最短経路の心
printfの("Nhap dinh xuat phat s = "); scanf関数(の "%D",&S);
printfの("Nhap dinh ket thuc f = "); scanf関数(の "%D",&F);
ダイクストラ(N,ザ·,L,パイ,S);
もし(L[F]== VC) printfの("Khong co duong di");
ほかに
{
printfの("\n Duong di tu %d den %d ngan nhat %d \n",S,F,L[F]);
induong(S,F,パイ);
}
Lを削除;
パイを削除;
getchは();
}
Cái thuật này mình chưa tìm hiểu nên xin lỗi bạn mình chưa rõ 🙂
彼は私に尋ねました,フロイドは、どのようにアルゴリズムAを評価したいです? 私はちょうどそれを言いました 0(N ^ 3) どのように私は、このアルゴリズムのKOを評価ガイドでください?先生に感謝
あなたがNHEを評価する方法この資料で参照してください。:
https://www.cachhoc.net/2013/06/14/thuat-toan-p1-cach-tinh-do-phuc-tap-thuat-toan-algorithm-complexity/
それ自体は、私は、エラーコードのブロックの文字が野生実行したものに走った理由は上記の高度なコードを尋ねます
しかし、彼の実行は大丈夫でした, それはあなたがエラー方法です?
あなたは* .cファイルを置いてください、それは、C ライブラリは、それを持つべきではないではありません. あなたが持っているC のライブラリは、* .cppファイルを置くために
フロイドはダイクストラ負の重みを使用していない理由を電子求めます?? eは明らかではないが、?? 電子うちk個
ようこそ、, 申し訳ありませんが、あなたは私を呼ばれ、負の鍵アルゴリズムに真である私のバイアスが確認されたときに昨日. これについて学ぶために、我々は実証アルゴリズムに依存する必要が:
“私たちは指摘するだろう, 頂点vは集合Sに追加されたとき, 次にD[で] V秒から最短経路の値.
定義ラベルDで, D[で] ソースSからの経路における最短経路の値, Sの上の上の, その後、エッジUVによってVに直接接続.
V秒からパスより小さい値dが存在すると仮定し[で]. このような方法で, ピークはSとの間に存在するとvはないSで. Wを選択するには、最初のような山頂であります.
私のパスは、フォームのを取ります – … – で – … – で. しかし、原因非負辺の重みへのセグメントsべき – … – 全体よりも大きい長さwの方法ではありません, そしてd未満したがって価値[で]. 一方, 私たちのWを選択して, セグメントSの長さは、万一 – … – wはdと[で]. したがって、D[で] < d[v], trái với cách chọn đỉnh v. Đây là điều mâu thuẫn. Vậy điều giả sử của ta là sai. Ta có điều phải chứng minh." Như vậy nếu trọng số của các cạnh có thể âm thì ta không khẳng định được "đoạn s - ... - w có độ dài bé hơn đoạn s-w-v" và như vậy ta không thể chứng minh tiếp. Trong khi đó xét thuật toán floyd: "Để đi từ a --> B. あなたが失われました 1 距離はxは. アルゴリズムがあります 1 からの間接的な方法 — へ — Bと、このパスが短く直接的なルートであれば、私たちは常に間接的な方法を介して直接最小値を割り当てます。” ダイクストラのように見えることなく、徐々に間接的に正しい方法を見つけるので、最短のセグメントは、正または負の重みによる影響を受けません.
私の友人は、自分が別の最小重量のゲームではあなたの道を見つけるための最短の方法を見つけることです尋ねました. 重要なのは関係なく、数kええのがあります?
本質的には異なっているが、我々はそれほとんど真剣にマイレージ番号考慮する問題はそれほど違いはありません.
V を見て、自分自身に尋ねました – しない?
V - あなたは何者ですか?
私の友人は、あなたは、アルゴリズムコードFORDを持っています & フルカーソンは適用しないことを証明します
私はああを持っていませんでした.
私はVFを持っていないC ++あなた自身のすべてのためのCコードを持っていることは学びたいです
彼の他のポストのCコードこと.
スター電子ダイクストラ実行コードセクション 1 戻る障害のあるストップが正しく動作します?? レビューPES先生?
あなたは、エラーのために何をチェックしますかNHE.
ああ、私の星、あなた、それはちょうど、このエラー
http://www.mediafire.com/view/aowfsuq6jpz5a0c/Loi.jpg
KO KOのC対によるそれらのコードは、明確にすべき.
どうやら、このJavaコードあなたは、特定の作家を集めます!
この記事あなたCOEであなたのjavaを有する場合? 😛 Và đảm bảo tất cả các code trong bài này và code Demo chương trình đồ họa bằng Java đều do tay mình viết. Nếu bạn thấy ở chỗ khác thì chỉ có họ copy của mình thôi. 😛 😛
軍事オファー
Chỗ này code có vấn đề :
*G = (int型 **) のmalloc((*N) * はsizeof(int型));
修理: sizeof *int
*G = (int型 **) のmalloc((*N) * はsizeof(*int型));
Có thể bạn run trên Os 32 bit nên kết quả vẫn đúng, trên 64bit chắc là có vấn đề.
Mình chỉ đọc qua thôi chứ chưa debug :))
かわいいです.
Ah rồi, mình có thấy lỗi. 🙂 cảm ơn bạn nhé.
a có thể mô phỏng thuật toán AT giúp e dc k?
AT la thuat toan gi the?
MÌnh vừa review code thì thấy 1 かなり不思議 :
あなたが割り当てこのコード:
int型のn, ザ·, B, で, 合計= 0; // ==> 合計= 0 ;
のために (int型のi = 0; レンで[0] = 0 , のみ[1] = 0 …. のみ[-1] = 0;
}
のみ[ザ·] = 0;
// どこの途中でこの段落はレンを再割り当て[で] 私はどこから実行します 0 n-1個の ;
//==> のみ[0] = 0 , のみ[1] = 0 …. のみ[-1] = 0;
のために (int型J = 0; J < N; J ) { // ハイブリッド結晶日当酸味コメントの長さ
もし (!S[J] && のみ[で] + G[で][J] < のみ[J]) {
のみ[J] =レン[で] + G[で][J]; // への変更
??? 条件レン[で] + G[で][J] < のみ[J] 今までにない起こります? とき 0 + へ < 0 ?
確認コードNHE, レン自身は、forループで最初の合計に割り当てられました
のみ[で] = SUM;
非常に熱心。. 記事のおかげで
しかし、なぜ使用コードブロックMK k個のMKベジタリアン旅行DCサブルーチンは十分に早く宣言します .
Bạn nhìn xem nó báo lỗi gì nhé, dựa vào đó mới sửa được 🙂
があります
sao mình chạy code nó báo là không tìm thấy file input là sao vậy ad, 電子と
あなたは、同じフォルダinput.inp ZIPファイルNHEを提出することを忘れないでください.
ああ、質問fに対する, 行列からグラフを構築する場合、むしろファイルkを有するK Aから直接読み取ら?
入手する. ファイルからの読み込みのみ行列のことを読まれます.
私は、コードを実行することは可能にする方法を見つけることができません
E完全なコードPES Aを経由して送信することができます
例えば1-道>3 結果aを表示できません
プレビューデモPES A〜Fの可能な結果
そして、彼のコードは標準実行されることを. 彼の記事でも例常に前.
DCコードはバック@例を最短パスを実行しません: 1<-2<-3<-4
ない場所の開始位置は、バックエンドの位置を入力します
その入力の1行目にあります. 私はすべてのNHEを読みます.
PESはfile.txtが運営するコードのための缶
このコードは、エクスポート・ファイルを入力することによって実行されます.
私のPN ! 自分はフロイドのアルゴリズムについて尋ねました ! ないZIPだけでなく、自分の手を実行する方法 !
ようこそ、!
フロイドのアルゴリズムに自問してみてください
フロイドが無効に (int型A, int型B)
{
int型の最大値= tongthiethai();
}
tongthiethai機能() コード内であなたの嘘ます?
ああ, この関数は、合計の関数であります[で][J] それに対して、, この中で私が書いていません, あなたはそれに書き込むことができます. ただ、使用 2 ネストされたループに加えて、すべての[で][J] 再び.
a có thể viết cụ thể cái hàm tongthiethai() giúp e dc ko ạ, 電子感謝
là hàm tính tổng tất cả a[で][J] あなたのその.
かわいいです
入力は、これが最短経路を見つけるためのコードを含むファイルを読み込むための場所であるために行列Kとしてそれを提出した場合NTN先生、彼はあります. EのおかげでA, 先生と担当者のヘルプE.
ファイル名は、グラフが含まれています
-最初の行の整数nは、頂点の数を表します。
-次の行は、各エッジを示します, 1 エッジカバー 3 整数, 2 最初の番号は、チャートのトップを表します, 次の番号は、長加算を表します, カンマで区切られた数字.
見ます:
10
0,1,10
0,5,20
0,7,50
3,5,10
5,6,15
….
兄の兄弟は、それが何であるか、入力ファイルの入力と出力を尋ねたとAHでどこかに取得します
自己生成された入力ファイル, プログラムによって生成された出力ファイルは、入力ファイルの結果に基づいて、.
弟のAは、入力ファイルはすべてAJHをkを持っています. 用に作成された入力ファイルに私が知っているk個 1 行列NTNサー
そして、フィニッシュへの入力として、ファイルをコピーします.
バックハムに失敗しました - > int型のラインポイント[N]; TVコンテンツは、障害をネットワークではありません
この行は宣言された配列であります. 確かに、あなたは上のVSのコードのようにする必要があります. あなたはint型のポイントと交換することができます[100];
ネットワークAからです 8 -> 1 コストは 10
しかし、トレースネットワーク-Pはその後に行きます 8 -> 6 -> 3 -> 2 -> 1 コストになります 11, スマート考え方は正しいです 8-5-6-3-2-1 しかしえっ ?
ようこそ、, mình có thắc mắc vs một vài vấn đề ko hiểu:
– Đỉnh bắt đầu a là 4: 0
+ 4 -> 1: 2+0= 2
+ 4 -> 3: 4+0= 4
+ 4 -> 6: 3+0= 3
+ 4 -> 7: 6+0=6
– Đỉnh 1: 2
+ 1 -> 2: 3+2=5
+ 1 -> 3: 5+2= 7(ko cập nhật)
– Đỉnh 2: 5
+ 2 -> 5: 7+5=12
+ 2 -> 3: 1+5=6(ko cập nhật)
– Đỉnh 3: 4
+ 3 -> 6: 1+4=5(ko cập nhật)
– Đỉnh 6: 3
+ 6 -> 8: 6+3=9
Tới b = 8
ダイクストラは、関数が場所を理解されていない読んで:
のみ[で] < レン、アレイは、合計が含まれています [0,3,5,2] ラインで 0 各列対 0,1,2,3 各列中 5,6,7 それは信じられないほどであるカウントされません。.
ファイルは、マトリクスアレイを入力するように私は混乱して感じました 2 私は対コラムを読んよう次元の線 2 アレイを用いてループ 1 その大きさはどのように理解していません
あなたの答えを助けるために自分の欲望を理解せず日間、コードを読みます. 宜しくお願いします
レンを実行する過程で[で] 私は特定のトップの長さを見つける必要が変更することができます < sum để đi tiếp. File đầu vào là mảng 2 chiều, mình đọc vào G rồi, làm gì có chỗ nào đọc bằng mảng 1 chiều đâu bạn.
あなたはそれが非常に長さを使用している検索位置対とポイントではありませんコメント場所はレン次元配列対分Sである、それはまだを通過して下さい 8 しかし、ピーク入力配列で 2 夜. 私のために、私はJのための彼の顎が読み違えていない時に非常それぞれ小さなピークを取得する機能を考えます, のみ[で] アイルランド対[J] 接続対ピークまたはピークはあなたを行うれます. 彼のもつれ…
彼のアルゴリズムを述べるには、私はあなたを得ました. 使用 1 レン·アレイ[] - レン[で] 私を頂点する頂点までの最短距離である.
ありがとう, 私は読んでますが読み違えていません. 自分がわかりやすくするために探してビデオを表示するには
Cho xem xin code chương trình xây dựng thụật toán Floyd với ạ. 私は感謝します!
Có code ở trên rồi nhé.
ko bít anh có làm video nào nói về thuật toán dijkstra ko ạ… tại em sắp thi HSG tin mà khi lên mạng tìm hỉu thì vẫn chưa hỉu lắm ạ… mog a giúp đỡ cho
Mình chỉ có bài viết này thôi.
code dau tien mình chay nhung ko ra duoc output
Bạn phải có input từ file nhé.
cho e hỏi cái hàm Tongthiethai() trong phần code của Floyd viết sao v ạ
ウェイター, cho em hỏi là thuật toán floyd ở trên là dùng Phương pháp gì vậy ạ.
quy hoạch động hay quay lui hay vet cạn?