社区讨论
重载错在哪?悬赏一关
P1491集合位置参与者 4已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @lo1623sb
- 此快照首次捕获于
- 2023/10/22 15:47 2 年前
- 此快照最后确认于
- 2023/11/02 15:23 2 年前
这题我用dij然后用优先队列存结构体的时候自己重载运算符和用优先队列来存pair结果不同,为啥?
CPPstruct node
{
double dis;
int pos;
friend bool operator < (const node &x,const node &y)
{
return x.dis>y.dis;
}
};
priority_queue<node>q;
const int inf=0x7fffffff;
int change[maxnode];
void dij(int s,int p)
{
for(int i=1;i<=n;i++)
d[i]=inf,vis[i]=0;
d[s]=0;
q.push(node{0,s});
while(!q.empty())
{
int temppos=q.top().pos;
q.pop();
if(vis[temppos])
continue;
vis[temppos]=1;
for(int i=head[temppos];i;i=line[i].pre)
{
if(p==-1 || pd(i,p))
{
int v=line[i].to;
double w=line[i].w;
if(d[v]>d[temppos]+w)
{
d[v]=d[temppos]+w;
if(p==-1)
change[v]=i;
q.push(node{-d[v],v});
}
}
}
}
}
下面的是对的
CPPpriority_queue<pair<double,int> >q;
const int inf=0x7fffffff;
int change[maxnode];
void dij(int s,int p)
{
for(int i=1;i<=n;i++)
d[i]=inf,vis[i]=0;
d[s]=0;
q.push(make_pair(0,s));
while(!q.empty())
{
int temppos=q.top().second;
q.pop();
if(vis[temppos])
continue;
vis[temppos]=1;
for(int i=head[temppos];i;i=line[i].pre)
{
if(p==-1 || pd(i,p))
{
int v=line[i].to;
double w=line[i].w;
if(d[v]>d[temppos]+w)
{
d[v]=d[temppos]+w;
if(p==-1)
change[v]=i;
q.push(make_pair(-d[v],v));
}
}
}
}
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...