|
10鱼币
输入文件形如:
38,69//城市数,边数
哈尔滨
长春
沈阳
大连
呼和浩特
北京
天津
乌鲁木齐
银川
太原
石家庄
济南
青岛
西宁
兰州
西安
郑州
南京
上海
拉萨
成都
重庆
武汉
合肥
杭州
昆明
贵阳
长沙
南昌
宁波
南宁
广州
厦门
福州
海口
澳门
深圳
香港
//38个城市名称
哈尔滨,长春,1.0
长春,沈阳,1.0
沈阳,大连,1.5
沈阳,天津,3.5
沈阳,北京,3.0
大连,天津,4.0
天津,北京,0.5
天津,济南,1.0
北京,呼和浩特,2
北京,石家庄,1.0
呼和浩特,太原,4.5
呼和浩特,银川,7.5
银川,太原,6.0
银川,西安,3.0
银川,兰州,7.5
太原,石家庄,1.5
太原,郑州,2.5
太原,西安,3.0
石家庄,郑州,1.5
石家庄,济南,2.0
济南,青岛,1.5
济南,南京,2.0
青岛,上海,5.0
上海,南京,1.0
上海,杭州,1.0
南京,合肥,1.0
南京,郑州,3.0
郑州,武汉,2.0
郑州,西安,2.0
西安,重庆,4.5
西安,兰州,2.5
兰州,成都,7.0
兰州,西宁,1.0
西宁,拉萨,20
成都,重庆,1.0
成都,贵阳,3.0
重庆,武汉,6.0
重庆,贵阳,2.0
武汉,长沙,1.0
武汉,合肥,1.5
合肥,南昌,4.0
合肥,杭州,2.0
杭州,宁波,1.0
宁波,福州,1.0
南昌,福州,3.0
南昌,厦门,4.5
南昌,长沙,1.5
长沙,广州,2.5
长沙,贵阳,3.0
贵阳,南宁,5.0
贵阳,昆明,2.0
昆明,南宁,4.0
南宁,广州,3.0
广州,海口,10.0
广州,澳门,1.0
广州,深圳,0.5
厦门,深圳,2.5
厦门,福州,1.5
深圳,香港,0.5
//69条无向边的两个顶点及权值(权值表示所需时间)
从输入文件读取信息,构建无向图的邻接矩阵表示,并将邻接矩阵打印出来
sh-5.2$ cat main.cpp
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <map>
using std::string, std::vector;
using std::ostream;
using std::cout, std::endl;
using std::map;
class node_t;
class line_t {
public:
line_t(const node_t *first, const node_t *second, double size): first(first), second(second), size(size) {}
const node_t *first, *second;
double size;
};
class node_t {
public:
node_t(const string &name = ""): name(name) {}
void add_line(const line_t line) {
this->line.push_back(line);
}
friend ostream &operator<<(ostream &os, const node_t &node);
string name;
vector<line_t> line;
};
ostream &operator<<(ostream &os, const node_t &node) {
for(const auto &i: node.line) {
const string &first = i.first->name;
const string &second = i.second->name;
cout << node.name << " -> " << (node.name != first ? first : second) << ": " << i.size << endl;
}
return os;
}
const map<string, node_t> create_graph() {
map<string, node_t> result;
char buff[2][1024];
double size;
while(scanf("%1023[^,],%1023[^,],%lf\n", buff[0], buff[1], &size) == 3) {
string name[2] = {buff[0], buff[1]};
node_t &first = result[name[0]];
node_t &second = result[name[1]];
first.name = name[0];
second.name = name[1];
line_t line(&first, &second, size);
first.add_line(line);
second.add_line(line);
}
return result;
}
ostream &operator<<(ostream &os, const map<string, node_t> &m) {
for(const auto &i: m) os << i.second;
return os;
}
int main() {
cout << create_graph() << endl;
return 0;
}
sh-5.2$ ./main <data.txt
上海 -> 青岛: 5
上海 -> 南京: 1
上海 -> 杭州: 1
兰州 -> 银川: 7.5
兰州 -> 西安: 2.5
兰州 -> 成都: 7
兰州 -> 西宁: 1
北京 -> 沈阳: 3
北京 -> 天津: 0.5
北京 -> 呼和浩特: 2
北京 -> 石家庄: 1
南京 -> 济南: 2
南京 -> 上海: 1
南京 -> 合肥: 1
南京 -> 郑州: 3
南宁 -> 贵阳: 5
南宁 -> 昆明: 4
南宁 -> 广州: 3
南昌 -> 合肥: 4
南昌 -> 福州: 3
南昌 -> 厦门: 4.5
南昌 -> 长沙: 1.5
厦门 -> 南昌: 4.5
厦门 -> 深圳: 2.5
厦门 -> 福州: 1.5
合肥 -> 南京: 1
合肥 -> 武汉: 1.5
合肥 -> 南昌: 4
合肥 -> 杭州: 2
呼和浩特 -> 北京: 2
呼和浩特 -> 太原: 4.5
呼和浩特 -> 银川: 7.5
哈尔滨 -> 长春: 1
大连 -> 沈阳: 1.5
大连 -> 天津: 4
天津 -> 沈阳: 3.5
天津 -> 大连: 4
天津 -> 北京: 0.5
天津 -> 济南: 1
太原 -> 呼和浩特: 4.5
太原 -> 银川: 6
太原 -> 石家庄: 1.5
太原 -> 郑州: 2.5
太原 -> 西安: 3
宁波 -> 杭州: 1
宁波 -> 福州: 1
广州 -> 长沙: 2.5
广州 -> 南宁: 3
广州 -> 海口: 10
广州 -> 澳门: 1
广州 -> 深圳: 0.5
成都 -> 兰州: 7
成都 -> 重庆: 1
成都 -> 贵阳: 3
拉萨 -> 西宁: 20
昆明 -> 贵阳: 2
昆明 -> 南宁: 4
杭州 -> 上海: 1
杭州 -> 合肥: 2
杭州 -> 宁波: 1
武汉 -> 郑州: 2
武汉 -> 重庆: 6
武汉 -> 长沙: 1
武汉 -> 合肥: 1.5
沈阳 -> 长春: 1
沈阳 -> 大连: 1.5
沈阳 -> 天津: 3.5
沈阳 -> 北京: 3
济南 -> 天津: 1
济南 -> 石家庄: 2
济南 -> 青岛: 1.5
济南 -> 南京: 2
海口 -> 广州: 10
深圳 -> 广州: 0.5
深圳 -> 厦门: 2.5
深圳 -> 香港: 0.5
澳门 -> 广州: 1
石家庄 -> 北京: 1
石家庄 -> 太原: 1.5
石家庄 -> 郑州: 1.5
石家庄 -> 济南: 2
福州 -> 宁波: 1
福州 -> 南昌: 3
福州 -> 厦门: 1.5
西宁 -> 兰州: 1
西宁 -> 拉萨: 20
西安 -> 银川: 3
西安 -> 太原: 3
西安 -> 郑州: 2
西安 -> 重庆: 4.5
西安 -> 兰州: 2.5
贵阳 -> 成都: 3
贵阳 -> 重庆: 2
贵阳 -> 长沙: 3
贵阳 -> 南宁: 5
贵阳 -> 昆明: 2
郑州 -> 太原: 2.5
郑州 -> 石家庄: 1.5
郑州 -> 南京: 3
郑州 -> 武汉: 2
郑州 -> 西安: 2
重庆 -> 西安: 4.5
重庆 -> 成都: 1
重庆 -> 武汉: 6
重庆 -> 贵阳: 2
银川 -> 呼和浩特: 7.5
银川 -> 太原: 6
银川 -> 西安: 3
银川 -> 兰州: 7.5
长春 -> 哈尔滨: 1
长春 -> 沈阳: 1
长沙 -> 武汉: 1
长沙 -> 南昌: 1.5
长沙 -> 广州: 2.5
长沙 -> 贵阳: 3
青岛 -> 济南: 1.5
青岛 -> 上海: 5
香港 -> 深圳: 0.5
sh-5.2$
|
-
|