IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2.13总结 -> 正文阅读

[C++知识库]2.13总结

1.上午两个半小时

完成了两个题目。

P2910 [USACO08OPEN]Clear And Present Danger S

P2910 [USACO08OPEN]Clear And Present Danger S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)s

思路

直接用弗洛伊德算法的模板就可以了,思路相似。

代码实现

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int m,n,sum=0;
    int a[10001],b[101][101];
    scanf("%d %d",&n,&m);
    for(int i=1; i<=m; i++)
        scanf("%d",&a[i]);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            scanf("%d",&b[i][j]);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            for(int k=1; k<=n; k++)
                b[j][k]=min(b[j][i]+b[i][k],b[j][k]);
    for(int i=2; i<=m; i++)
        sum=sum+b[a[i-1]][a[i]];
    //sum=sum+b[0][a[0]];
    //sum=sum+b[a[m-1]][n-1];
    printf("%d",sum);
    return 0;
}

P1395 租用游艇

P1359 租用游艇 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路

还是和弗洛伊德算法的思路相似,套用模板就可以了。

代码实现

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[201][201],b[201]= {0};
    for(int i=1; i<n; i++)//站与站之间的租金
        for(int j=i+1; j<=n; j++)
            scanf("%d",&a[i][j]);
    //for(int i=1; i<=n; i++)
        //b[i]=9999999;
    for(int i=2; i<=n; i++)
    {
        for(int j=1; j<=i; j++)
        {
            if(b[i]==0)//如果还是最初的就更新
                b[i]=b[j]+a[j][i];
            else
            {
            if(b[i]>b[j]+a[j][i])//一直找小的
                b[i]=b[j]+a[j][i];
            else
                b[i]=b[i];
            }
        }
    }
    printf("%d",b[n]);
    return 0;
}

2.下午四个半小时

听学长讲课,然后完成了一个题目。

P3371 【模板】单源最短路径(弱化版)

P3371 【模板】单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路

套用迪杰斯特拉算法的模板。

代码实现

#include<bits/stdc++.h>
using namespace std;
int head[10001];
int n,m,s,o,p,q,cnt;
bool vis[10001];
long long dist[10001];
struct Edge
{
    int to;
    int weight;
    int next;
}edge[500001];
void addedge(int a,int b,int v)
{
    cnt++;
    edge[cnt].to=b;
    edge[cnt].weight=v;
    edge[cnt].next=head[a];
    head[a]=cnt;
}
void dij()
{
    for(int i=1;i<=n;i++)
    {
        dist[i]=2147483647;
        vis[i]=false;
    }
    dist[s]=0;
    int idex=s;
    while(!vis[idex])
    {
        vis[idex]=true;
        for(int i=head[idex];i!=0;i=edge[i].next)
        {
            if(!vis[edge[i].to]&&dist[edge[i].to]>dist[idex]+edge[i].weight)
            {
                dist[edge[i].to]=dist[idex]+edge[i].weight;
            }
        }
        int Min=2147483647;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i]&&Min>dist[i])
            {
                Min=dist[i];
                idex=i;
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        printf("%lld ",dist[i]);
    }
}
int main()
{
    scanf("%d %d %d",&n,&m,&s);
    for(int i=1;i<=m;i++)
    {
        scanf("%d %d %d",&o,&p,&q);
        addedge(o,p,q);
    }
    dij();
    return 0;
}

3.晚上两个小时

P4779【模板】单源最短路径(标准版)

P4779 【模板】单源最短路径(标准版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路

和弱化版的区别就是点的个数增加了很多,如果还用刚刚一样的代码,肯定会超时,所以我们要用到一个新的算法-----优先队列。

代码实现

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
const int zz=0x7fffffff;
const int M=500001;
int n,m,s=1,cnt,e,a,b,c;
int head[N],dist[N];
bool vis[N];
struct edge
{
    int to;
    int weight;
    int next;
} edge[M];
struct node
{
    int idex;
    int v;
    bool operator<(const node &x) const
    {
        return x.v<v;
    }
};
void addedge(int a,int b,int v)
{
    cnt++;
    edge[cnt].to=b;
    edge[cnt].weight=v;
    edge[cnt].next=head[a];
    head[a]=cnt;
}
void dij()
{
    for(int i=1; i<=n; i++)
    {
        vis[i]=false;
        dist[i]=zz;
    }
    dist[s]=0;
    priority_queue<node> q;
    q.push({s,0});
    while(q.size())
    {
        int idex=q.top().idex;
        q.pop();
        if(vis[idex])
            continue;
        vis[idex]=true;
        for(int i=head[idex]; i; i=edge[i].next)
        {
            if(dist[edge[i].to]>dist[idex]+edge[i].weight)
                dist[edge[i].to]=dist[idex]+edge[i].weight;
            if(!vis[edge[i].to])
                q.push({edge[i].to,dist[edge[i].to]});
        }
    }
    for(int i=1;i<=n;i++)
        printf("%d ",dist[i]);
}
int main()
{
    scanf("%d %d %d",&n,&m,&s);
    for(int i=1; i<=m; i++)
    {
        scanf("%d %d %d",&a,&b,&c);
        addedge(a,b,c);
    }
    dij();
    return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 20:56:33  更:2022-02-14 20:58:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:38:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码