hdu1142_hdu1001

hdu1142_hdu1001这道题纠结了好久~~~最后发现最短路的算法求错了~~~可是以前用此代码AC了好几道题了~~~汗~~求指点~先是最后ac代码:#include#include#include#include#defineINF1000010010usingnamespacestd;intd[1005];intvis[1005];intw[1005][1005];

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

这道题纠结了好久~~~最后发现最短路的算法求错了~~~

可是以前用此代码AC了好几道题了~~~汗~~求指点~

先是最后ac代码:

#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#define INF 1000010010
using namespace std;
int d[1005];
int vis[1005];
int w[1005][1005];
int s[1005];
void init(int n)
{
    memset(s,0,sizeof(s));
    memset(vis,0,sizeof(vis));
    int i,j;
    for(i=0;i<=n;i++)
    {
        for(j=0;j<=n;j++)
        {
            w[i][j]=INF;
            if(i==j)
                w[i][j]=0;
        }
        d[i]=INF;
    }
}
int DFS(int k,int n)
{
    if(s[k])
        return s[k];
     if(k == 2)
        return 1;
    for(int i=1; i<=n; i++)
     {
         if(w[k][i]!=INF && d[k]>d[i])
            s[k]+=DFS(i,n);
   }
    return s[k];
}
struct cmp
{
    bool operator()(int a,int b)
    {
        return a>b;
    }
};
int main()
{
    int n,m;
    while(scanf("%d",&n),n!=0)
    {
        init(n);
        scanf("%d",&m);
        int i,a,b,d1;
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&a,&b,&d1);
            if(d1<w[a][b])
                w[a][b]=w[b][a]=d1;
        }

        d[2]=0;
        //priority_queue<int,vector<int>,cmp> q;
        typedef pair<int,int> pii;
        priority_queue<pii,vector<pii>,greater<pii> > q;
        q.push(make_pair(d[2],2));
        while(!q.empty())
        {
            pii t1=q.top();
            q.pop();
            int t=t1.second;
            if(vis[t])
                continue;
            vis[t]=1;
            for(i=1;i<=n;i++)
            {
                if(!vis[i]&&d[i]>d[t]+w[t][i])
                {
                    d[i]=d[t]+w[t][i];
                    q.push(make_pair(d[i],i));
                }
            }
        }

        printf("%d\n",DFS(1,n));

    }
    return 0;
}

然后是WA的代码:

#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#define INF 1000010010
using namespace std;
int d[1005];
int vis[1005];
int w[1005][1005];
int s[1005];
void init(int n)
{
    memset(s,0,sizeof(s));
    memset(vis,0,sizeof(vis));
    int i,j;
    for(i=0;i<=n;i++)
    {
        for(j=0;j<=n;j++)
        {
            w[i][j]=INF;
            if(i==j)
                w[i][j]=0;
        }
        d[i]=INF;
    }
}
int DFS(int k,int n)
{
    if(s[k])
        return s[k];
     if(k == 2)
        return 1;
    for(int i=1; i<=n; i++)
     {
         if(w[k][i]!=INF && d[k]>d[i])
            s[k]+=DFS(i,n);
   }
    return s[k];
}
struct cmp
{
    bool operator()(int a,int b)
    {
        return d[a]>d[b];             //此处修改
    }
};
int main()
{
    int n,m;
    while(scanf("%d",&n),n!=0)
    {
        init(n);
        scanf("%d",&m);
        int i,a,b,d1;
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&a,&b,&d1);
            if(d1<w[a][b])
                w[a][b]=w[b][a]=d1;
        }

        d[2]=0;
        priority_queue<int,vector<int>,cmp> q;         //此处修改
        //typedef pair<int,int> pii;
        //priority_queue<pii,vector<pii>,greater<pii> > q;
        q.push(2);
        while(!q.empty())
        {
            int t=q.top();
            q.pop();
            //int t=t1.second;
            if(vis[t])
                continue;
            vis[t]=1;
            for(i=1;i<=n;i++)
            {
                if(!vis[i]&&d[i]>d[t]+w[t][i])
                {
                    d[i]=d[t]+w[t][i];
                    q.push(i);              //此次修改~~
                }
            }
        }

        printf("%d\n",DFS(1,n));

    }
    return 0;
}

感觉对的~~但是wa了 难道priority queue 用法有误么~~

~~知道问题了~~原来是priority_queue有问题~看看实现就知道了~q.push().q.pop() 都会排序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187309.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月19日 下午10:28
下一篇 2026年4月19日 下午10:34


相关推荐

  • pywin32、win32api、win32gui、win32com、win32con 都是啥?「建议收藏」

    pywin32、win32api、win32gui、win32com、win32con 都是啥?「建议收藏」pywin32、win32api、win32gui、win32com、win32con名称非常类似,特别容易混淆,今天就用600字给大家区分一下文章目录pywin32win32guiwin32conwin32apiwin32com记录时间pywin32pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个模块库。该模块的另一个作用是是通过Python进行COM编程。落地场景:如果你想在Windows操作系统用Python实现自动化工作,pywin32模块经常用到

    2022年10月11日
    4
  • Windows 自己主动关机命令 shuntdown

    Windows 自己主动关机命令 shuntdown

    2021年12月1日
    64
  • 服务器系统装显卡驱动,windows2019服务器系统安装显卡驱动(A卡篇)

    服务器系统装显卡驱动,windows2019服务器系统安装显卡驱动(A卡篇)原创:张荣国今天捣腾一台旧电脑安装windows2019服务器系统,测网站等。安装windows2019倒是没什么难度。本来想着服务器系统,也不用理它驱动了,毕竟基本驱动它会自己装上。但后来接显示器时,分辨率只有1024,而且显示器是宽频的,这样的分辨率图标都变形了,越看越觉得难受,索性想着帮它装个显卡驱动吧,来个正确分辨率就好了。可是网上找了一圈,服务器系统的显卡驱动就没有。想想也是,服务器毕竟…

    2026年4月16日
    5
  • git解决.gitignore不起作用

    git解决.gitignore不起作用转载自 https blog csdn net weixin article details utm medium distribute pc relevant none task blog baidujs title 0 amp spm 1001 2101 3001 4242 删除本地缓存 gitrm rcached 提交到暂缓区 gitadd 提交到本地仓库 gitcommit m update gitingnore

    2026年3月26日
    3
  • linux struts2漏洞,Struts2漏洞分析,漏洞波及全系版本

    linux struts2漏洞,Struts2漏洞分析,漏洞波及全系版本Struts漏洞分析ApacheStruts团队已经发布了Struts2.3.15.1安全更新版本。在Struts2.3.15.1版本之前,存在着严重的安全漏洞,如果现在一些比较大的网站是用JAVA做的,没有把版本升级,还用的是Strtus2.3.15.1版本之前的话,那么你们就要小心,服务器被黑了哦。下面就来说一下之前版本,Struts2的漏洞是如何产生的,我们自己去做,该如何的去解决这个…

    2022年7月19日
    15
  • mysql5.7卸载不干净_mysql卸载残留

    mysql5.7卸载不干净_mysql卸载残留一、在控制面板中卸载mysql软件,此时mysql没有卸载干净。二、卸载过后删除C:ProgramFiles(x86)MySQL该目录下剩余了所有文件,把mysql文件夹也删了三、windows+R运行“regedit”文件,打开注册表四、删除注册表:HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesEventlogApplicationMySQL文件夹…

    2026年4月16日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号