# 打扣 ```cpp= #include <bits/stdc++.h> using namespace std; const int Row = 500; const int Col = 500; const int Floor = 100; class point_dat //for display purposes { private: int x,y,z; // ex. x*Col*Floor + y*Floor + Floor //bool stair; public: //bool is_stair(int temp_id){ return point[temp_id].stair;} }point[Row*Col*Floor]; vector<pair<int, int> > edge[Row*Col*Floor]; // first = go to second = weight vector<int> dijisktra(int start, int target) { edge[0].push_back({1,1}); edge[1].push_back({0,1}); edge[1].push_back({2,1}); edge[2].push_back({1,1}); edge[2].push_back({3,1}); edge[3].push_back({2,1}); edge[3].push_back({4,1}); edge[4].push_back({3,1}); edge[4].push_back({5,1}); edge[5].push_back({4,1}); edge[5].push_back({6,1}); edge[6].push_back({5,1}); edge[6].push_back({7,1}); edge[7].push_back({6,1}); edge[7].push_back({8,1}); edge[8].push_back({7,1}); edge[8].push_back({9,1}); edge[9].push_back({8,1}); edge[9].push_back({10,1}); edge[10].push_back({9,1}); edge[10].push_back({11,1}); edge[11].push_back({10,1}); edge[11].push_back({12,1}); edge[12].push_back({11,1}); edge[12].push_back({13,1}); edge[13].push_back({12,1}); edge[13].push_back({15,1}); edge[15].push_back({13,1}); edge[15].push_back({16,1}); edge[16].push_back({15,1}); edge[16].push_back({17,1}); edge[17].push_back({16,1}); edge[17].push_back({18,1}); edge[18].push_back({17,1}); edge[18].push_back({19,1}); edge[19].push_back({18,1}); edge[20].push_back({21,1}); edge[21].push_back({20,1}); edge[23].push_back({24,1}); edge[24].push_back({23,1}); edge[25].push_back({26,1}); edge[26].push_back({25,1}); edge[26].push_back({27,1}); edge[27].push_back({26,1}); edge[27].push_back({28,1}); edge[28].push_back({27,1}); edge[28].push_back({29,1}); edge[29].push_back({28,1}); edge[29].push_back({30,1}); edge[30].push_back({29,1}); edge[30].push_back({31,1}); edge[31].push_back({30,1}); edge[31].push_back({32,1}); edge[32].push_back({31,1}); edge[32].push_back({33,1}); edge[33].push_back({32,1}); edge[33].push_back({34,1}); edge[34].push_back({33,1}); edge[34].push_back({35,1}); edge[35].push_back({34,1}); edge[35].push_back({36,1}); edge[36].push_back({35,1}); edge[36].push_back({37,1}); edge[37].push_back({36,1}); edge[37].push_back({38,1}); edge[38].push_back({37,1}); edge[38].push_back({39,1}); edge[39].push_back({38,1}); edge[22].push_back({39,1}); edge[39].push_back({22,1}); int n = Row*Col*Floor; int dist[n+5]; int from[n+5]; priority_queue<pair<int, int> ,vector<pair<int, int> >,greater<pair<int, int> >> pq; for(int i=1; i<=n; i++) if(i != start) dist[i]=1e9; from[start] = -1; pq.push({0,start}); while(!pq.empty()) { pair<int, int> u=pq.top(); pq.pop(); for(pair<int, int> v : edge[u.first]) if(dist[v.first] > dist[u.second] + v.second) { dist[v.first] = dist[u.second] + v.second; from[v.first] = u.second; pq.push({dist[v.first],v.first}); } } vector<int> route; for(int i=target; i!=-1; i=from[i]) route.push_back(i); reverse(route.begin(),route.end()); return route; } // 到這裡就好 void build_Graph() { FILE *fp; fp = freopen("data.txt","r",stdin); // input format: from to weight int from,to,weight; while(cin >> from) { cin >> to >> weight; edge[from].push_back({to,weight}); edge[to].push_back({from,weight}); } fclose(fp); } map<string, int> point_id_query;//some kind of database int point_id(string ap_id) { return point_id_query[ap_id]; } int user_at(string user_id) { string ap_id = //use user_id to get ap_id return point_id(ap_id); } int user_to(string user_id) { int temp = //find out where user wants to go return temp; } void route_display(string user_id) { int at = user_at(user_id); int to = user_to(user_id); vector<int>route = dijisktra(at, to); //display for(int v:route)//example { draw_red(point[v].x,point[v].y,point[v].z); } } ```