カーナビゲーションでは、現在位置から目的地までの最短経路を探し出す処理を行ないます。
最短経路を探し出すには、経路情報を持つ地図が必要となります。経路情報としては様々な形式
のものが考えられますが、最短経路を決めるには、経路の分岐点、すなわち交差点の情報がなく
てはなりません。今回の実習では、交差点を扱うのに必要となる情報について説明し、それを
どのようにプログラム中で表現するかを説明します。
最短経路探索のために交差点を扱う際に必要な情報として、以下のものが挙げられます。
交差点情報 ・交差点のID(識別番号) ・交差点名 ・位置座標 (x,y) ・平均待ち時間 ・交差道路数 ・隣接交差点ID |
上記の交差点情報をプログラム中で表すにはどうすれば良いでしょうか?
まず一番始めに思いつくのは、それぞれの情報を別々の変数として表現する方法です。
交差点情報 ・交差点のID(識別番号) ・交差点名 ・位置座標(x,y) ・平均待ち時間 ・交差道路数 ・隣接交差点ID |
必要となる変数 int id; char name[50]; double x, y; double wait; int points; int next[5]; /* 最大交差道路数が5 */ |
交差点情報 ・交差点のID(識別番号) ・位置座標(x,y) ・平均待ち時間 ・交差点名 ・交差道路数 ・隣接交差点ID |
構造体"Crossing" typedef struct { int id; Position pos; double wait; char name[50]; int points; int next[5]; } Crossing; |
構造体"Position" typedef struct { double x, y; } Position; |
定義した構造体"Crossing"は、新しい種類の変数"Crossing型"として使うことができます。
Crossing型の変数crossの宣言とその使用例 Crossing cross; cross.id = 1; /* IDに1を設定 */ cross.pos.x = 10.5; /* (x,y)座標を設定 */ cross.pos.y = -128; scanf("%lf", &(cross.wait)); /* 待ち時間をキーボードから入力 */ scanf("%s", cross.name); /* 名前をキーボードから入力 */ |
Crossing型の変数crossの配列宣言とその使用例 Crossing cross[100]; /* cross[0] 〜 cross[99]が作成される */ /* 0番目の要素cross[0]への値の代入 */ cross[0].id = 1; /* IDに1を設定 */ cross[0].pos.x = 10.5; /* (x,y)座標を設定 */ cross[0].pos.y = -128; scanf("%lf", &(cross[0].wait)); /* 待ち時間をキーボードから入力 */ scanf("%s", cross[0].name); /* 名前をキーボードから入力 */ |