###実現したいこと
距離が最小となる点をみつける関数をつくりたい
###問題点
デバック用に作った std::cout << "[" << i << "]->[" << j << "]=" << dist << std::endl;//デバッグ用 が永遠に続いてしまう。
抜け出し方を教えてください。
###コード
C++
1#include<iostream> 2#include<vector> 3#include<cmath> 4 5struct Point 6{ 7 double x; 8 double y; 9}; 10 11//二点a,bの間の距離を計算する関数 12double distance(Point a,Point b) 13{ 14 double dis; 15 dis=std::sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); 16 return dis; 17} 18 19//vectorに保存されている点の集合から、距離が最小となる2点を計算する関数 20void closet_pair(std::vector<Point>& points, int& idx1, int& idx2,double& dist) //idx1,idx2は最小となる二点の添え字,distは二点間の距離 21{ 22 int n=points.size(); //配列の大きさ 23 dist=distance(points[0],points[1]); 24 double d=0; 25 int i,j; 26 idx1=0; 27 idx2=1; 28 for(i=0;i<n-1;i++){ 29 for(j=i+1;i<n;j++){ 30 d=distance(points[i],points[j]); //距離を求める関数の呼び出し 31 std::cout << "[" << i << "]->[" << j << "]=" << dist << std::endl;//デバッグ用 32 if(d<dist){ 33 dist=d; 34 idx1=i; 35 idx2=j; 36 } 37 } 38 } 39} 40 41int main() 42{ 43 int n,i; 44 double dist=0; //距離 45 int idx_a,idx_b; //添え字 46 47 std::cout<<"点の個数を入力してください\n"; 48 std::cin>>n; 49 50 std::vector<Point> pts; //配列 51 std::cout<<n<<"点の座標を入力してください\n"; 52 for(i=0;i<n;i++){ 53 Point p; 54 std::cin>>p.x; 55 std::cin>>p.y; 56 pts.push_back(p); 57 } 58 59 //距離が最小となる二点を計算する関数の呼び出し 60 closet_pair(pts, idx_a, idx_b,dist); 61 62 //最近点対の添え字と距離を出力 63 std::cout<<"添字は\n"<<idx_a<<"と"<<idx_b; 64 std::cout<<"その距離は"<<dist; 65 std::cout<<"\n"; 66 67 return 0; 68}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/06 06:13