日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

UVA 216 Getting in Line

發(fā)布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA 216 Getting in Line 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

大意:給你一些定點,讓你以代價最小的邊將所有的點連起來。

?

思路:數(shù)據(jù)范圍很小,可以通過最小生成樹或者回溯來解決。

?

最小生成樹去寫時不知道哪錯了,于是用回溯模擬了一遍,相當于模擬一個數(shù)組的全排列。

?

AC CODE:

?

#include?<cstdio>
#include?<cstdlib>
#include?<cstring>
#include?<cmath>
#include?<climits>?????//INT_MAX,整形范圍內(nèi)的最大整數(shù)。
#include?<algorithm>
using?namespace?std;

#define?INF?0x3f3f3f3f
const?int?SIZE?=?110;

double?d[SIZE];
int?vis[SIZE],?save[SIZE],?ans[SIZE];
int?n;
double?Min;

struct?node
{
????double?x,?y;
}a[SIZE];

double?fun(const?node?a,?const?node?b)
{
????return?sqrt((b.x?-?a.x)?*?(b.x?-?a.x)?+?(b.y?-?a.y)?*?(b.y?-?a.y));
}

void?init()
{
????memset(vis,?0,?sizeof(vis));
????for(int?i?=?0;?i?<?n;?i++)?ans[i]?=?i;
????Min?=?INF;
}

void?dfs(int?cur,?double?sum)
{
????if(cur?==?n)
????{
????????if(Min?>?sum)
????????{
????????????Min?=?sum;
????????????memcpy(ans,?save,?sizeof(save));
????????}
????????return?;
????}
????if(sum?>=?Min)?return?;
????for(int?i?=?0;?i?<?n;?i++)?if(!vis[i])
????{
????????vis[i]?=?1;
????????save[cur]?=?i;
????????if(cur?==?0)
????????{
????????????dfs(cur+1,?0);
????????}
????????else
????????{
????????????double?dis?=?fun(a[save[cur]],?a[save[cur-1]]);
????????????dfs(cur+1,?sum+dis);
????????}
????????vis[i]?=?0;
????}
}

int?main()
{
????int?times?=?0;
????while(~scanf("%d",?&n)?&&?n)
????{
????????init();
????????for(int?i?=?0;?i?<?n;?i++)
????????{
????????????scanf("%lf%lf",?&a[i].x,?&a[i].y);
????????}
????????dfs(0,?0);
????????printf("**********************************************************\n");
????????printf("Network?#%d\n",?++times);
????????for(int?i?=?1;?i?<?n;?i++)
????????{
????????????double?dis?=?fun(a[ans[i]],?a[ans[i-1]])?+?16.00;
????????????printf("Cable?requirement?to?connect?(%.lf,%.lf)?to?(%.lf,%.lf)?is?%.2lf?feet.\n",?a[ans[i-1]].x,?a[ans[i-1]].y,?a[ans[i]].x,?a[ans[i]].y,?dis);
????????}
????????double?tot?=?(n-1)*16.00;
????????printf("Number?of?feet?of?cable?required?is?%.2lf.\n",?Min+tot);
????}
}

?

WA CODE:

?

#include?<cstdio>
#include?<cstdlib>
#include?<cstring>
#include?<cmath>
#include?<climits>?????//INT_MAX,整形范圍內(nèi)的最大整數(shù)。
#include?<algorithm>
using?namespace?std;

#define?INF?0x3f3f3f3f
const?int?SIZE?=?110;


double?w[SIZE][SIZE];
double?d[SIZE];
int?v[SIZE];
int?n;

struct?node
{
????double?x,?y;
}a[SIZE];

double?fun(const?node?a,?const?node?b)
{
????return?sqrt((b.x?-?a.x)?*?(b.x?-?a.x)?+?(b.y?-?a.y)?*?(b.y?-?a.y));
}

double?Prim(int?src)
{
????int?i,?j,?first?=?0;
????double?cnt?=?0;
????int?pre?=?src;
????for(i?=?1;?i?<=?n;?i++)?d[i]?=?(i?==?src)??0:INF;
????for(i?=?1;?i?<=?n;?i++)
????{
????????int?x;
????????double?m?=?INF;
????????for(int?y?=?1;?y?<=?n;?y++)?if(!v[y]?&&?m?>?d[y])?m?=?d[x=y];
????????v[x]?=?1;
????????cnt?+=?m;
????????if(first)
????????{
????????????printf("Cable?requirement?to?connect?(%.lf,%.lf)?to?(%.lf,%.lf)?is?%.2lf?feet.\n",?a[pre].x,?a[pre].y,?a[x].x,?a[x].y,?m+16);
????????}
????????for(int?y?=?1;?y?<=?n;?y++)?d[y]?=?min(d[y],?w[x][y]);
????????pre?=?x;
????????first?=?1;
????}
????return?cnt;
}

void?init()
{
????memset(v,?0,?sizeof(v));
????memset(d,?0,?sizeof(d));
????memset(a,?0,?sizeof(a));
????for(int?i?=?1;?i?<=?SIZE;?i++)
????????for(int?j?=?1;?j?<=?SIZE;?j++)
????????????w[i][j]?=?w[j][i]?=?INF;
}



int?main()
{
????int?i,?j;
????int?times?=?0;
????while(~scanf("%d",?&n)?&&?n)
????{
????????init();
????????for(i?=?1;?i?<=?n;?i++)
????????{
????????????scanf("%lf%lf",?&a[i].x,?&a[i].y);
????????}
????????for(i?=?1;?i?<=?n;?i++)
????????{
????????????for(j?=?1;?j?<=?n;?j++)
????????????{
????????????????if(i?==?j)?continue;
????????????????w[i][j]?=?w[j][i]?=?fun(a[i],?a[j]);
????????????}
????????}
????????printf("**********************************************************\n");
????????printf("Network?#%d\n",?++times);
????????double?ans?=?Prim(1);
????????double?tot?=?(n-1)*16.00;
????????printf("Number?of?feet?of?cable?required?is?%.2lf.\n",?ans+tot);
????}
????return?0;
}

?

轉(zhuǎn)載于:https://www.cnblogs.com/g0feng/archive/2012/10/13/2722749.html

總結(jié)

以上是生活随笔為你收集整理的UVA 216 Getting in Line的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。