#include #include #include using namespace std; int minimumDist(double dist[], bool Tset[]) { int min=INT_MAX,index; for(int i=0;i<7;i++) { if(Tset[i]==false && dist[i]<=min) { min=dist[i]; index=i; } } return index; } void Dijkstra(double graph[7][7],int src) { double dist[7]; bool Tset[7]; int path[7][30]; vector paths[7]; for(int i = 0; i<7; i++) { dist[i] = INT_MAX; Tset[i] = false; } dist[src] = 0; for(int j = 0; j<7; j++) { int m=minimumDist(dist,Tset); Tset[m]=true; for(int i = 0; i<7; i++) { if(!Tset[i] && graph[m][i] && dist[m]!=INT_MAX && dist[m]+graph[m][i]= 0) { dist[i]=dist[m]+graph[m][i]; path[j][i] = m; for (int k = 0; k < paths[m].size(); k++) paths[i].push_back(paths[m][k]); paths[i].push_back(m); } } } cout<<"Vertex\t\tDistance from source"< #include #include #include #include #include #include #include #include #include namespace bg = boost::geometry; int main() { std::cout << std::fixed; std::cout << std::setprecision(2); typedef bg::model::point point_t; typedef bg::model::segment segment_t; typedef bg::model::linestring linestring_t; typedef bg::model::polygon polygon_t; polygon_t poly1{ {{-0.5, 1.0}, {1.0, 3.0}, {5.0, 6.0}, {6.0, 3.0}, {4.0, 0.0}, {-0.5, 1.0}}, {} }; linestring_t ls1{{0.0, 0.0}, {0.0, 4.0}}; polygon_t poly11{ {{-0.5, 1.0}, {0, 4.0}, {2.0, 2.0}, {3.0, 5.0}, {6.0, 3.0}, {2.0, 0.0}, {-0.5, 1.0}}, {} }; linestring_t ls11{{0.0, 0.9}, {3, -1}}; bg::correct(ls11); std::vector all_points; std::vector output; bg::intersection(ls11, poly11, output); if (output.size() > 0) { std::cout<<"Number of Intersection points:"<(output[i]); y = bg::get<1>(output[i]); std::cout<<"x:"<(p1, 0); bg::set<1>(p1, 0); point_t p2; bg::set<0>(p2, 0); bg::set<1>(p2, 4); all_points.push_back(p1); all_points.push_back(p2); for (int v = 0; v < boost::geometry::exterior_ring(poly1).size() - 1; v++) { point_t p = boost::geometry::exterior_ring(poly1)[v]; all_points.push_back(p); } float mat[all_points.size()][all_points.size()]; for (int v1 = 0; v1 < all_points.size(); v1++) { point_t p1 = all_points[v1]; double x1 = bg::get<0>(p1); double y1 = bg::get<1>(p1); for (int v2 = 0; v2 < all_points.size(); v2++) { point_t p2 = all_points[v2]; double x2 = bg::get<0>(p2); double y2 = bg::get<1>(p2); linestring_t temp_ls1 {{x1, y1}, {x2, y2}}; std::vector tempoutput; boost::geometry::intersection(temp_ls1, poly1, tempoutput); if (tempoutput.size() == 0) { mat[v1][v2] = bg::distance(p1, p2); } else if(tempoutput.size() == 1) { bool check_touches = bg::touches(temp_ls1, poly1); if (check_touches) { mat[v1][v2] = bg::distance(p1, p2); } else { mat[v1][v2] = -1; } } else mat[v1][v2] = -1; } } std::cout<<"MATRIX"<