UVa 216 - Getting in Line
2129 단어 NetWork
코드는 다음과 같습니다.
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
struct point
{
int x, y;
} po[10];
int n;
double save_d[10], dis[10], tot, dd;
int max_[10], save_v[10], vis[10];
int solve(int cur, double d)
{
if(cur == n)
{
if(d < tot)
{
tot = d;
for(int i = 0; i < n; i++)
{
save_d[i] = dis[i];
max_[i] = save_v[i];
}
}
return 1;
}
for(int i = 0; i < n; i++)
if(!vis[i])
{
if(cur)
{
double ans1, ans2;
ans1 = (double)(po[i].x - po[save_v[cur - 1]].x);
ans2 = (double)(po[i].y - po[save_v[cur - 1]].y);
dd = sqrt(ans1 * ans1 + ans2 * ans2);
dis[cur - 1] = dd;
}
else
dd = 0;
if(d + dd > tot) // ,
continue;
vis[i] = 1;
save_v[cur] = i;
solve(cur + 1, d + dd);
vis[i] = 0;
}
return 0;
}
int main()
{
#ifdef test
freopen("sample.txt", "r", stdin);
#endif
int num = 1;
while(scanf("%d", &n), n)
{
tot = 1000000;
memset(vis, 0, sizeof(vis));
for(int i = 0; i < n; i++)
scanf("%d%d", &po[i].x, &po[i].y);
solve(0, 0);
printf("**********************************************************
");
printf("Network #%d
", num++);
for(int i = 0; i < n - 1; i++)
printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2lf feet.
", po[max_[i]].x, po[max_[i]].y, po[max_[i + 1]].x, po[max_[i + 1]].y, save_d[i] + 16);
printf("Number of feet of cable required is %.2lf.
", tot + (n - 1) * 16);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제5장 iSNSP 메시지 형식(iSNSP Message Format) - 6, 등록 및 조회 메시지PDU Payload의 모든 Source, Message Key, Delimiter, Operating Attribute는 Tag-Length-Value(TLV) 형식으로 저장됩니다.iSNS 등록 및 조회 메시지는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.