データ構造とアルゴリズム総合実験(二)の図と観光地情報管理システムの実践(一)
5026 ワード
実験の目的
1、図の定義と図の記憶構造を把握する.2、図の作成方法と図の応用を把握する.3、C++言語を使用して、図のデータ構造を定義し、反復開発の構想と結びつけて「観光地情報管理システム」を実現する.
注意しなければならないのは、今回の実験はGraphにあります.hでは図の定義がPPTで与えられたものと若干異なり,graphの定義では複数回のリンクの問題を回避するためにexternが宣言する形式を採用している.
main.cppメインプログラムソースファイル
Graph.hヘッダファイル
Graph.cppソースファイル
Tourism.h旅行先ファイル
Tourism.cpp観光ソースファイル
1、図の定義と図の記憶構造を把握する.2、図の作成方法と図の応用を把握する.3、C++言語を使用して、図のデータ構造を定義し、反復開発の構想と結びつけて「観光地情報管理システム」を実現する.
注意しなければならないのは、今回の実験はGraphにあります.hでは図の定義がPPTで与えられたものと若干異なり,graphの定義では複数回のリンクの問題を回避するためにexternが宣言する形式を採用している.
main.cppメインプログラムソースファイル
#include"Tourism.h"
#include
using namespace std;
int main() {
menu();
return 0;
}
Graph.hヘッダファイル
#ifndef GRAPH_H
#define GRAPH_H
struct Vex {
int num; //
char name[20]; //
char infor[1024]; //
/* ==
bool operator==(const Vex &t) {
return num==t.num;
}
*/
};
struct Edge {
int vex1,vex2;
int weight; //
};
struct Graph {
int map[20][20]; //
Vex vexs[20]; //
int VexNum; //
};
void Init();
int InsertVex(Vex sVex);
int InsertEdge(Edge sEdge);
Vex getVeX(int nVex);
int FindEdge(int nVex, Edge aEdge[]);
int GetVexnum();
#endif
Graph.cppソースファイル
#include "Graph.h"
#include
Graph graph;
using namespace std;
void Init() {
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if (i == j) graph.map[i][j] = 0;
else graph.map[i][j] = 0xffff;
}
}
graph.VexNum = 0;
}
int InsertVex(Vex sVex) {
if (graph.VexNum >= 20) return 0;
graph.vexs[graph.VexNum] = sVex;
graph.VexNum++;
return 1;
}
int InsertEdge(Edge sEdge) {
int num1 = sEdge.vex1;
int num2 = sEdge.vex2;
if (num1 != num2) {
graph.map[num1][num2] = sEdge.weight;
graph.map[num2][num1] = sEdge.weight;
return 1;
}
else return 0;
}
Vex getVeX(int nVex) {
return graph.vexs[nVex];
}
int FindEdge(int nVex, Edge aEdge[]) {
int k = 0;
for (int i = 0; i < graph.VexNum; i++) {
if (graph.map[i][nVex] > 0 && graph.map[i][nVex] < 0xffff) {
aEdge[k].vex1 = nVex;
aEdge[k].vex2 = i;
aEdge[k].weight = graph.map[i][nVex];
k++;
}
}
return k;
}
int GetVexnum() {
return graph.VexNum;
}
Tourism.h旅行先ファイル
#ifndef TOURISM_H
#define TOURISM_H
void CreateGraph();
void GetSpotInfo();
void menu();
#endif
Tourism.cpp観光ソースファイル
#include
#include
#include"Tourism.h"
#include"Graph.h"
using namespace std;
extern Graph graph;
void CreateGraph() {
ifstream is;
Init();
is.open("Vex.txt");
int n;
is >> n;
cout << " :" << n << endl;
cout << "----- -----" << endl;
for (int i = 0; i < n; i++) {
Vex vex;
is >> vex.num >> vex.name >> vex.infor;
cout << vex.num << "-" << vex.name << endl;
if (InsertVex(vex) == 0) {
cout << " !" << endl;
break;
}
}
is.close();
is.open("Edge.txt");
Edge edges[190];
int k = 0;
cout << "----- -----" << endl;
while (is >> edges[k].vex1 >> edges[k].vex2 >> edges[k].weight) {
cout << " " << edges[k].weight << endl;
if (InsertEdge(edges[k]) == 0) {
cout << " !" << endl;
break;
}
k++;
}
for (int i = 0; i < k; i++) {
int num1 = edges[i].vex1;
int num2 = edges[i].vex2;
int weight = edges[i].weight;
graph.map[num1][num2] = weight;
graph.map[num2][num1] = weight;
}
is.close();
}
void GetSpotInfo() {
cout << "===== =====" << endl;
for (int i = 0; i < graph.VexNum; i++) {
cout << graph.vexs[i].num << "-" << graph.vexs[i].name << endl;
}
cout << " :";
int k;
cin >> k;
for (int i = 0; i < graph.VexNum; i++) {
if (graph.vexs[i].num == k) {
cout << graph.vexs[i].name << endl;
cout << graph.vexs[i].infor << endl;
break;
}
}
cout << "----- -----" << endl;
Edge aEdges[180];
int m = FindEdge(k, aEdges);
cout << m << endl;
for (int i = 0; i < m; i++) {
cout << graph.vexs[aEdges[i].vex1].name << "->" << graph.vexs[aEdges[i].vex2].name << " " << aEdges[i].weight << "m" << endl;
}
}
void menu() {
cout << "===== =====" << endl;
cout << "1. " << endl;
cout << "2. " << endl;
cout << "3. " << endl;
cout << "4. " << endl;
cout << "5. " << endl;
cout << "0. " << endl;
cout << " (0~5):";
int i;
cin >> i;
switch (i) {
case 0:exit(0); break;
case 1: {
CreateGraph();
cout << " !" << endl;
menu();
break;
}
case 2: {
GetSpotInfo();
menu();
break;
}
case 3://
case 4://
case 5://
default: {
cout << " 0~5 :";
menu();
break;
}
}
}