不懂就问,关于0x3f 和 0x7f
  • 板块学术版
  • 楼主SakurajiamaMai
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/8/19 11:20
  • 上次更新2023/11/3 02:44:05
查看原帖
不懂就问,关于0x3f 和 0x7f
784813
SakurajiamaMai楼主2023/8/19 11:20

在memset过程中,我用0x3f得到的答案不正确,但0x7f确实正确的

我记得prim算法好像0x3f就够了?到底是哪里出的问题,有大佬说一下吗

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int N=1e6+10;
int u,v,n,m,num,cnt,t;
double x[N],y[N],res,g[2000][2000],dis[N];
bool vis[N];
double dist(double x1,double y1,double x2,double y2)
{
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double prim()
{
    dis[1]=0;
    for(int i=0;i<n;i++){
        int t=-1;
        for(int j=1;j<=n;j++)//寻找最短距离的点
            if(!vis[j]&&(t==-1||dis[t]>dis[j])) t=j;
        res+=dis[t];
        for(int j=1;j<=n;j++) dis[j]=min(dis[j],g[t][j]);//更新最短距离
        vis[t]=true;
    }
    return res;
}
int main()
{
    cin>>n>>m;
    memset(dis,0x7f,sizeof dis);
    memset(g,0x3f,sizeof g);
    for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
            g[i][j]=g[j][i]=dist(x[i],y[i],x[j],y[j]);
    for(int i=1;i<=m;i++){
        int u,v;
        cin>>u>>v;
        g[u][v]=g[v][u]=0.0;
    }
    printf("%.2lf",prim());
    return 0;
}

/*
4 1
1 1
3 1
2 3
4 3
1 4
*/

2023/8/19 11:20
加载中...