#include <vector> #include <set> #include <iostream> #include <fstream> using namespace std; struct point { int row;//行 int col;//列 set<int> attribute;//属性值 }; int *map; int m=10, n=10;// point *PointMap; vector<point> Openlist1;//开启列表1 vector<point> Openlist2;//开启列表2 point E1;//电梯1 point E2;//电梯2 void Readfile() { ifstream in("D:\\创新开发大赛\\生成voronoi图\\voronoi\\voronoi\\map.txt"); map = new int[m*n]; PointMap = new point[m*n];//地图初始化 for (int i = 0; i <= m; i++) { for (int j = 0; j <= n; j++) { map[i*n + j] = 0; PointMap[i*n + j].row = i; PointMap[i*n + j].col = j; } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { in >> map[i * n + j];//将map.txt中的数据读入到map数组中 if (map[i*n + j] == 1) { E1.row = i; E1.col = j;//读取电梯1所在位置 } if (map[i*n + j] == 2) { E2.row = i; E2.col= j;//读取电梯2所在位置 } } } in.close(); } void Enlarge(int row1, int col1, int row2, int col2) { int temp_row1, temp_col1; int temp_row2, temp_col2; point p1; point p2; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { if (PointMap[row1*n + col1].attribute.size() > 1) continue; if (i == 0 && j == 0) continue; if (i != 0 && j != 0) continue;//只往十字方向扩张 int temp_row1 = row1 + i; int temp_col1 = col1 + j; //cout << temp_row << temp_col << endl; if (temp_row1< 0 || temp_row1 >= m) continue; if (temp_col1 < 0 || temp_col1 >= n) continue; p1 = PointMap[temp_row1*n + temp_col1]; p1.attribute.insert(1); map[i*n + j] = 1; if (PointMap[row2*n + col2].attribute.size() > 1) continue; if (i == 0 && j == 0) continue; if (i != 0 && j != 0) continue;//只往十字方向扩张 int temp_row2 = row2 + i; int temp_col2 = col2 + j; //cout << temp_row << temp_col << endl; if (temp_row2 < 0 || temp_row2 >= m) continue; if (temp_col2 < 0 || temp_col2 >= n) continue; p2 = PointMap[temp_row2*n + temp_col2]; p2.attribute.insert(2); map[i*n + j] = 2; Enlarge(temp_row1, temp_col1, temp_row2, temp_col2); } } } void Output() { ofstream out("D:\\创新开发大赛\\生成voronoi图\\voronoi\\voronoi\\结果.txt"); for (int i = 0; i <= m; i++) { for (int j = 0; j <= n; j++) { out << map[i*n + j] << " "; } out << endl; } out.close(); } void main() { Readfile(); Openlist1.push_back(E1); Openlist2.push_back(E2); Enlarge(E1.row,E1.col,E2.row,E2.col); Output(); cout << "生成结束"<<endl; }