【蓝桥杯-单链表-网络寻路】

2024-04-06 07:12
文章标签 网络 蓝桥 单链 寻路

本文主要是介绍【蓝桥杯-单链表-网络寻路】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

蓝桥杯-单链表-网络寻路

  • 单链表基本操作
    • 操作一:向链表头插入一个数
    • 操作二:在第 k个插入的数后插入一个数
    • 操作三:删除第 k个插入的数后面的一个数;
  • P8605 [蓝桥杯 2013 国 AC] 网络寻路

单链表基本操作

初始化有关操作

// head 表示头结点的下标
// e[i] 表示节点i的值
// ne[i] 表示节点i的next指针是多少
// idx 存储当前已经用到了哪个点,这个点的节点
int head, e[N], ne[N], idx;// 初始化
void init()
{head = -1;idx = 0;
}

操作一:向链表头插入一个数

// 将x插到头结点
void add_to_head(int x)
{e[idx] = x;取valuene[idx] = head,;将idx指向head“指向的节点”head = idx;将head指向idxidx++;下一个idx(工具人)
}

这里的head可以比较令人费解,head表示的是头节点的下标,其本身不是节点。指向head指向的节点其实就是指向原来的头节点,这样新节点就取而代之成为新的头节点。

操作二:在第 k个插入的数后插入一个数

// 将x插到下标是k的点后面
void add(int k, int x)
{e[idx] = x;ne[idx] = ne[k];ne[k] = idx ;idx++;
}

操作三:删除第 k个插入的数后面的一个数;

// 将下标是k的点后面的点删掉
void remove(int k)
{ne[k] = ne[ne[k]];
}

P8605 [蓝桥杯 2013 国 AC] 网络寻路

在这里插入图片描述
思路:

  1. 以第一组数据为例,先将给定的三组节点连起来,且可以双向通讯。
  2. 结果就是 1->2; 2->1; 2->3; 3->2; 1->3; 3->1; 然后我们就可以去拼接了。
  3. 用dfs去枚举子节点,且记录父节点不能重复(题目要求的中间节点必须不同)
    说明:
    1->2->1 不会出现,直接continue到下一个。
    1->2->3->1 就是合法的。
    解释:
    题目的中间节点不重复,转移两个位置只是针对4个节点。节点很多也去其中4个。
    题目的中间节点不合法的情况必然会出现1->2->1这种与父节点相同的,因此只要引入父节点就不会可以保证合法。
  4. 如果cnt==4 那就方案加1。
#include<bits/stdc++.h>
using namespace std;
#define int long longconst int N=1e5+10;int h[N],e[N],ne[N];
int ans;
int idx;void add(int a,int b)//去连接节点
{e[idx]=b;ne[idx]=h[a];h[a]=idx;idx++;
}void dfs(int x,int fa,int cnt)//枚举子节点
{if(cnt==4){ans++;return;}for(int i=h[x];i!=-1;i=ne[i]){int j=e[i];if(j==fa)continue;dfs(j,x,cnt+1);}return ;
}signed main()
{memset(h,-1,sizeof h);int n,m;cin>>n>>m;for(int i=0;i<m;i++){int x,y;cin>>x>>y;add(x,y);add(y,x);}//i为当前节点,对于第一次就是起点;fa为父节点;cnt为当前节点个数for(int i=1;i<=n;i++) //枚举起点{dfs(i,-1,1);}cout<<ans;return 0;
}

这篇关于【蓝桥杯-单链表-网络寻路】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879329

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 服务器端配置 在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。 安装 OFED 首先,安装 Open Fabrics Enterprise Distribution (OFED),它包含了 InfiniBand 所需的驱动程序和库。 sudo

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3

网络学习-eNSP配置NAT

NAT实现内网和外网互通 #给路由器接口设置IP地址模拟实验环境<Huawei>system-viewEnter system view, return user view with Ctrl+Z.[Huawei]undo info-center enableInfo: Information center is disabled.[Huawei]interface gigabit

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

Go语言构建单链表

package mainimport "fmt"type ListNode struct {Val intNext *ListNode}func main() {list := []int{2,4,3}head := &ListNode{Val:list[0]}tail := head //需要头尾两个指针for i:=1;i<len(list);i++ {//方法一 数组直接构建链表tai