###実現したいこと
・点の個数をはじめに入力し、次に点の座標を入力する→vectorに保存する
・**std::vector<Point>**に入力されている点の集合の中から、距離が最小となる2点を計算する関数を作る
これらを使って距離が最小となる2点を計算するプログラムを作る
###問題点
void closet_pair関数の部分がわからない その関数の呼び出しの部分でエラーがでる。関数の呼び出し方がわからない。
###コード
C++
1//最近点対 2#include<iostream> 3#include<vector> 4#include<cmath> 5 6struct Point 7{ 8 double x; 9 double y; 10 11 void input() 12 { 13 std::cin>>x>>y; 14 } 15 16 void output() 17 { 18 std::cout<<"("<<x<<","<<y<<")\n"; 19 } 20}; 21 22//二点a,bの間の距離を計算する関数 23double distance(Point a,Point b) 24{ 25 double dis; 26 dis=std::sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); 27 return dis; 28} 29 30//vectorに保存された配列を出力する関数 31void outout_points(std::vector<Point>& points) 32{ 33 int n=points.size(); 34 int i; 35 for(i=0;i<n;i++){ 36 points[i].output(); 37 } 38} 39 40//vectorに保存されている点の集合から、距離が最小となる2点を計算する関数 41void closet_pair(std::vector<Point>& points, int& idx1, int& idx2,double& dist) //idx1,idx2は最小となる二点の添え字,distは二点間の距離 42{ 43 int i=0; 44 int n=points.size(); 45 int d[100]; //それぞれ2点間の距離を保存する配列 46 int min=0; 47 for(i=0;i<n;i++){ 48 d[i]=distance(points[i],points[i+1]); //二点間の距離の関数呼び出し 49 idx1=i; 50 idx2=i+1; 51 } 52 min=d[0]; //配列dの中から最小値を見つけ出す 53 for(i=0;i<n;i++){ 54 if(min<d[i]){ 55 min=d[i]; 56 } 57 } 58 min=dist; 59 idx1=i; 60 idx2=i+1; 61} 62 63int main() 64{ 65 int n,i; 66 double dist=0; 67 68 std::cout<<"点の個数を入力してください\n"; 69 std::cin>>n; 70 71 std::vector<Point> pts; 72 std::cout<<"n点の座標を入力してください\n"; 73 for(i=0;i<n;i++){ 74 Point p; 75 p.input(); 76 pts.push_back(p); 77 } 78 79 //距離が最小となる二点を計算する関数の呼び出し 80 for(i=0;i<n;i++){ 81 closet_pair(pts,i,i+1,dist); 82 std::cout<<"距離が最小となるのは"<<pts; 83 std::cout<<"その時の二点の添え字は"<<i<<i+1; 84 } 85 return 0; 86}
回答2件
あなたの回答
tips
プレビュー