网站大量收购闲置独家精品文档,联系QQ:2885784924

最短経路(Dijkstra法)-lecture.ecc.u.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最短経路(Dijkstra法)-lecture.ecc.u

最短経路 最短経路 有向グラフのstart点から与えられたgoal点までの最短の経路を求める。ここでは、各辺の長さは1とする。 点の数はn。各点は0~n-1の番号で参照。 for (int i = 0; i n; i++) step[i] = -1; step[start] = 0; for (int s = 0; step[goal] == -1; s++) for (step[i]==sを満たす各iについて) for (iと隣接する各kについて) if (step[k] == -1) { step[k] = s+1; prev[k] = i; } public class Node() { int value; Node next; public Node(int x, Node n) { value = x; next = n; } } public class Shortest { static int[][] edges = ...; static int n = edges.length; static int[] step = new int[n]; static int[] prev = new int[n]; static Node q0, q1; static void shortest(int start, int goal) { for (int i = 0; i n; i++) step[i] = -1; step[start] = 0; q0 = new Node(start, null); for (int s = 0; step[goal] == -1; s++) { while (q0 != null) { int i = q0.value; int[] e = edges[i]; for (int j = 0; j e.length; j++) { int k = e[j]; if (step[k] == -1) { step[k] = s+1; q1 = new Node(k, q1); prev[k] = i; } } q0 = q0.next; } q0 = q1; } } public static void main(String[] args) { shortest(0, 9); for (int i = 9; i != 0; i = prev[i]) System.out.println(i); } } 配列の配列 配列の配列は次のように宣言?生成する。 int[][] a = new int[5][3]; 個々のa[i]は配列である。 int[] b; b = a[3]; 従って、各要素はa[i][j] と参照する。 配列の配列(続き) 個々のa[i]は空(null)でもよい。 int[][] a = new int[5][]; 個々のa[i]には、 大きさの異なる配列も 設定できる。 a[1] = new int[3]; a[2] = new int[2]; 配列の配列(最後) 配列は生成時に初期化できる。 int[][] a = {null, {1,2,3}, {4,5}, null, null}; 最短経路(Dijkstra法) Dijkstra法 有向グラフのstart点からgoal点までの最短の経路を求める。 点の数はn。各点は0~n-1の番号で参照。 for (int i = 0; i n; i++) dist[i] = ∞; dist[start] = 0; pool = startのみからなる集合; while (true) { poolの中でdist[i]が最小のものをiとする; poolからiを除く; if (i == goal) break; for (iと隣接する各kについて) if (dist[i] + (iからkへの距離) dist[k]) { dist[k] = dist[i] + (iからkへの距離): prev[k] = i; kをpoolに加える; } } public class Dijkstra { static int[][] edges = ...; static int[][] lengths = ...; static int n = edges.length;

文档评论(0)

sunhao111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档