# Brute Force# Geometry# Euclidean Distance

a583 - 1. 座位距離計算問題

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算給定平面上若干個點中,任意兩點之間距離的最小值。輸入包含座位數 N 和學生數 m,以及每個學生的座標 (x, y)。輸出最近兩個學生之間的歐幾里得距離,精確到小數點後四位。

解題思路

此題採用暴力解法。首先讀取學生數量和每個學生的座標,儲存在一個二維陣列中。然後,使用兩層迴圈遍歷所有可能的學生配對,計算它們之間的歐幾里得距離。在計算過程中,記錄下最小距離,最後輸出最小距離。

複雜度分析

  • 時間複雜度: O(m^2),其中 m 是學生數量。因為需要遍歷所有可能的學生配對。
  • 空間複雜度: O(m),其中 m 是學生數量。因為需要儲存所有學生的座標。

程式碼

#include <stdio.h>
#include <math.h>
int main(){
	int a,b;
	scanf("%d%d",&a,&b);
	float c[b][2]={0},min=10000;
	for(int i=0;i<b;i++){
		scanf("%f%f",&c[i][0],&c[i][1]);
	}
	for(int i=0;i<b;i++){
		for(int j=i+1;j<b;j++){
			float n=sqrt((c[i][0]-c[j][0])*(c[i][0]-c[j][0])+(c[i][1]-c[j][1])*(c[i][1]-c[j][1]));
			if(n<min){
				min=n;
			}
		}
	}
	printf("%.4f",min);
}

Discussion