poj 1751 prim
2012-02-15 09:10
162 查看
题目是说给了城镇的一些坐标,然后一些城镇是连通的,所以让连通的这些点的距离为0,然后用一个数组记录前驱,prim就可以求出来了,注意自己的答案不一定和上面的一样,因为是special judge,加油啊!~~~
#include <iostream>
#include <stdio.h>
using namespace std;
const int maxn=755;
const int maxm=1005;
const int inf=100000005;
int n,q;
struct node1
{
int x;
int y;
}map[maxn];
int dist[maxn];
int m[maxn][maxn];
int co[maxn][maxn];
int pre[maxm];
void prim()
{
bool visit[maxn];
int k;
int minn;
for(int i=1;i<=n;i++)
{
dist[i]=m[1][i];
visit[i]=false;
}
visit[1]=true;
dist[1]=0;
for(int i=1;i<=n-1;i++)
{
minn=inf;
k=0;
for(int j=1;j<=n;j++)
{
if(visit[j]==false&&dist[j]<minn)
{
minn=dist[j];
k=j;
}
}
if(minn!=0)printf("%d %d\n",pre[k],k);
if(k==0)return;
visit[k]=true;
for(int j=1;j<=n;j++)
{
if(visit[j]==false&&dist[j]>m[k][j]&&m[k][j]!=inf)
{
dist[j]=m[k][j];
pre[j]=k;
}
}
}
}
int main()
{
freopen("in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&map[i].x,&map[i].y);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i!=j)m[i][j]=inf;
else m[i][j]=0;
}
}
for(int i=1;i<=maxm;i++)
{
pre[i]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(i!=j)
{
m[i][j]=m[j][i]=(map[i].x-map[j].x)*(map[i].x-map[j].x)+(map[i].y-map[j].y)*(map[i].y-map[j].y);
}
}
}
scanf("%d",&q);
for(int i=1;i<=q;i++)
{
int a,b;
scanf("%d%d",&a,&b);
m[a][b]=m[b][a]=0;
}
prim();
return 0;
}
#include <iostream>
#include <stdio.h>
using namespace std;
const int maxn=755;
const int maxm=1005;
const int inf=100000005;
int n,q;
struct node1
{
int x;
int y;
}map[maxn];
int dist[maxn];
int m[maxn][maxn];
int co[maxn][maxn];
int pre[maxm];
void prim()
{
bool visit[maxn];
int k;
int minn;
for(int i=1;i<=n;i++)
{
dist[i]=m[1][i];
visit[i]=false;
}
visit[1]=true;
dist[1]=0;
for(int i=1;i<=n-1;i++)
{
minn=inf;
k=0;
for(int j=1;j<=n;j++)
{
if(visit[j]==false&&dist[j]<minn)
{
minn=dist[j];
k=j;
}
}
if(minn!=0)printf("%d %d\n",pre[k],k);
if(k==0)return;
visit[k]=true;
for(int j=1;j<=n;j++)
{
if(visit[j]==false&&dist[j]>m[k][j]&&m[k][j]!=inf)
{
dist[j]=m[k][j];
pre[j]=k;
}
}
}
}
int main()
{
freopen("in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&map[i].x,&map[i].y);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i!=j)m[i][j]=inf;
else m[i][j]=0;
}
}
for(int i=1;i<=maxm;i++)
{
pre[i]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(i!=j)
{
m[i][j]=m[j][i]=(map[i].x-map[j].x)*(map[i].x-map[j].x)+(map[i].y-map[j].y)*(map[i].y-map[j].y);
}
}
}
scanf("%d",&q);
for(int i=1;i<=q;i++)
{
int a,b;
scanf("%d%d",&a,&b);
m[a][b]=m[b][a]=0;
}
prim();
return 0;
}
相关文章推荐
- poj 1751 Highways (prim和kruskal)
- Prim POJ1258 POJ2485 POJ1789 POJ1751
- POJ 1751 Prim
- POJ 1751 Prim
- POJ 1751 Highways(最小生成树Prim普里姆,输出边)
- Poj 1751 Highways(prim)
- POJ 1751 Highways 最小生成树 Kruskal && Prim
- POJ1751 Highways(最小生成树)(prim)
- POJ 1751 Highways(Prim存储路径模板)
- POJ:1751-Highways(Kruskal和Prim)
- H - Highways - poj 1751(prim)
- poj 1751 Highways 最小生成树 prim
- poj1751 Highway (Prim)
- poj 1751 prim输出路径
- poj 3026 Borg Maze (BFS + Prim)
- poj 1751 Highways
- poj 1789 Truck History(java + prim)
- POJ 1797 Heavy Transportation(最大生成树-Prim)
- poj 2485 Highways(prim)
- poj 3026 Borg Maze(bfs+prim)