【代码随想录】【算法训练营】【第30天】 [322]重新安排行程 [51]N皇后 [37]解数独

前言

思路及算法思维,指路 代码随想录。
题目来自 LeetCode。

day 30,周四,好难,会不了一点~

题目详情

[322] 重新安排行程

题目描述

322 重新安排行程
322 重新安排行程

解题思路

前提:……
思路:回溯。
重点:……。

代码实现

C语言
回溯 + 链表自实现

超出时间限制!!

/*** Note: The returned array must be malloced, assume caller calls free().*/#define NAME_LEN 4
#define INVALID_NUM 1000typedef struct airlist {char *start;char **end;int endSize;bool *used;
} airList;struct airlist *list;
int listSize;
char **path;
int pathSize;int findListLoc(char *start, int ticketsSize)
{int j = INVALID_NUM;for (j = 0; j < ticketsSize; j++) {if ((list[j].start == NULL) || (0 == strcmp(start, list[j].start))) {return j;}}return j;
}void insertListLoc(char *end, int loc)
{int endS = list[loc].endSize;int serLoc = endS;if (list[loc].endSize > 0) {}for (int k = endS - 1; k >= 0; k--) {if (0 > strcmp(end, list[loc].end[k])) {strncpy(list[loc].end[k + 1], list[loc].end[k], NAME_LEN);serLoc = k;}}strncpy(list[loc].end[serLoc], end, NAME_LEN);(list[loc].endSize)++;return ;
}void init(char*** tickets, int ticketsSize)
{// 开辟空间// 初始化listlist = (struct airlist *)malloc(sizeof(struct airlist) * ticketsSize);memset(list, 0, sizeof(struct airlist) * ticketsSize);listSize = 0;for (int i = 0; i < ticketsSize; i++) {// 初始化startint loc = findListLoc(tickets[i][0], ticketsSize);if (list[loc].start == NULL) {list[loc].start = (char *)malloc(sizeof(char) * NAME_LEN);strncpy(list[loc].start, tickets[i][0], NAME_LEN);}// 初始化end,按字典序排列if (list[loc].end == NULL) {list[loc].end = (char **)malloc(sizeof(char *) * ticketsSize);for (int v= 0; v < ticketsSize; v++) {list[loc].end[v] = (char *)malloc(sizeof(char) * NAME_LEN);memset(list[loc].end[v], 0, sizeof(char) * NAME_LEN);}}insertListLoc(tickets[i][1], loc);// 初始化used数组if (list[loc].used == NULL) {list[loc].used = (bool *)malloc(sizeof(bool) * ticketsSize);memset(list[loc].used, 0, sizeof(bool) * ticketsSize);}listSize = (listSize < (loc + 1)) ? (loc + 1) : listSize;}// 初始化pathpath = (char **)malloc(sizeof(char *) * (ticketsSize + 1));for (int l = 0; l < (ticketsSize + 1); l++) {path[l] = (char *)malloc(sizeof(char) * NAME_LEN);memset(path[l], 0, sizeof(char) * NAME_LEN);}pathSize = 0;return ;
}bool backtracking(char *start, int  ticketsSize)
{// 退出条件if (pathSize == (ticketsSize + 1)) {return true;}// 递归int loca = findListLoc(start, ticketsSize);if (loca >= listSize) {return false;}bool result = false;for (int m = 0; (m < list[loca].endSize); m++) {// 去重if (list[loca].used[m] == true) {continue;}// 保存该路径strncpy(path[pathSize], list[loca].end[m], NAME_LEN);pathSize++;list[loca].used[m] = true;bool res = backtracking(list[loca].end[m], ticketsSize);if (res == false) {// 回溯pathSize--;list[loca].used[m] = false;result = false;}else{return true;}}return result;
}char** findItinerary(char*** tickets, int ticketsSize, int* ticketsColSize, int* returnSize) {if (*ticketsColSize != 2) {return NULL;}// 初始化init(tickets, ticketsSize);strncpy(path[pathSize], "JFK", strlen("JFK"));pathSize++;(void)backtracking("JFK", ticketsSize);*returnSize = pathSize;return path;
}
回溯 + 哈希

C的哈希函数好难~

/*** Note: The returned array must be malloced, assume caller calls free().*/typedef struct {char *name;        /* key */int cnt;           /* 记录到达机场是否飞过了 */UT_hash_handle hh; /* makes this structure hashable */
} to_airport_t;typedef struct {char *name; /* key */to_airport_t *to_airports;UT_hash_handle hh; /* makes this structure hashable */
} from_airport_t;void to_airport_destroy(to_airport_t *airports) {to_airport_t *airport, *tmp;HASH_ITER(hh, airports, airport, tmp) {HASH_DEL(airports, airport);free(airport);}
}void from_airport_destroy(from_airport_t *airports) {from_airport_t *airport, *tmp;HASH_ITER(hh, airports, airport, tmp) {to_airport_destroy(airport->to_airports);HASH_DEL(airports, airport);free(airport);}
}int name_sort(to_airport_t *a, to_airport_t *b) {return strcmp(a->name, b->name);
}bool backtracking(from_airport_t *airports, int target_path_len, char **path,int path_len) {if (path_len == target_path_len) return true;from_airport_t *from_airport = NULL;HASH_FIND_STR(airports, path[path_len - 1], from_airport);if (!from_airport) return false;for (to_airport_t *to_airport = from_airport->to_airports;to_airport != NULL; to_airport = to_airport->hh.next) {if (to_airport->cnt == 0) continue;to_airport->cnt--;path[path_len] = to_airport->name;if (backtracking(airports, target_path_len, path, path_len + 1))return true;to_airport->cnt++;}return false;
}char **findItinerary(char ***tickets, int ticketsSize, int *ticketsColSize,int *returnSize) {from_airport_t *airports = NULL;// 记录映射关系for (int i = 0; i < ticketsSize; i++) {from_airport_t *from_airport = NULL;to_airport_t *to_airport = NULL;HASH_FIND_STR(airports, tickets[i][0], from_airport);if (!from_airport) {from_airport = malloc(sizeof(from_airport_t));from_airport->name = tickets[i][0];from_airport->to_airports = NULL;HASH_ADD_KEYPTR(hh, airports, from_airport->name,strlen(from_airport->name), from_airport);}HASH_FIND_STR(from_airport->to_airports, tickets[i][1], to_airport);if (!to_airport) {to_airport = malloc(sizeof(to_airport_t));to_airport->name = tickets[i][1];to_airport->cnt = 0;HASH_ADD_KEYPTR(hh, from_airport->to_airports, to_airport->name,strlen(to_airport->name), to_airport);}to_airport->cnt++;}// 机场排序for (from_airport_t *from_airport = airports; from_airport != NULL;from_airport = from_airport->hh.next) {HASH_SRT(hh, from_airport->to_airports, name_sort);}char **path = malloc(sizeof(char *) * (ticketsSize + 1));path[0] = "JFK";  // 起始机场backtracking(airports, ticketsSize + 1, path, 1);from_airport_destroy(airports);*returnSize = ticketsSize + 1;return path;
}

[51] N皇后

题目描述

51 N皇后
51 N皇后

解题思路

前提:……
思路:回溯
重点:……

代码实现

C语言
//待补充

[37] 解数独

题目描述

37 解数独
37 解数独

解题思路

前提:……
思路:回溯
重点:……。

代码实现

C语言
// 待补充

今日收获

  1. 收获不了一点,已晕菜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ--Hello World(基础详解)

文章目录 先决条件RabbitMQ 初识RabbitMQ--Hello World发送接收 更多相关内容可查看 先决条件 本教程假定 RabbitMQ 已安装并在标准端口 &#xff08;5672&#xff09; 上运行。如果你 使用不同的主机、端口或凭据&#xff0c;连接设置将需要 调整。如未安装可查看Windows下载…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:桥梁结构安全监测

中国铁路设计集团有限公司&#xff08;简称中国铁设&#xff09;&#xff0c;原铁道第三勘察设计院集团有限公司&#xff08;铁三院&#xff09;&#xff0c;是中国国家铁路集团有限公司所属的唯一设计企业&#xff0c;成立于1953年&#xff0c;总部位于天津市&#xff0c;是以…

f4pga环境搭建教程

f4pga环境搭建教程 背景介绍 FOSS Flows For FPGA (F4PGA) project&#xff0c;是一套开源的FPGA工具链&#xff0c;号称the GCC of FPGAs&#xff0c;作用是将写的硬件描述语言&#xff08;verilog或VHDL&#xff09;转化为可以在FPGA上运行的可执行文件&#xff08;bit文件…

滨江区代理记账——专业、便捷的服务,让您的企业更加规范、高效

随着社会经济的发展和企业的规模扩大&#xff0c;依法纳税、做好财务工作变得越来越重要&#xff0c;而代理记账&#xff0c;就是这样一个专业的服务平台&#xff0c;为满足广大企业和个体户的会计需求&#xff0c;帮助他们规范财务管理&#xff0c;提高效率。 代理记账可以帮助…

基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析

原文链接&#xff1a;基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606139&idx4&snf94ec30bfb5fa7ac0320403d49db3b66&chksmfa821e9ccdf5978a44a9ba96f6e04a121c0bbf63beea0940b385011c0b…

MLU370-M8 chattts-ui快速出击

目录 一、paas平台环境选择二、代码环境准备1.代码下载2.环境安装modelsopetransformersaccelerate 3.常规pip安装4.代码修改4.代码修改 三.算法启动 一、paas平台环境选择 驱动选择&#xff1a;5.10.22及以上 镜像选择&#xff1a;pytorch2.1 二、代码环境准备 1.代码下载…

李廉洋:6.6黄金原油怎么看?今日行情分析及最新策略。

黄金消息面分析&#xff1a;美指走强未能抑制金价升势。黄金价格大幅上涨&#xff0c;在美国公布喜忧参半的经济数据后&#xff0c;金价与周二的走势发生180度大转弯&#xff0c;这些数据可能保证美联储设定的借贷成本降低。美国10年期基准国债收益率下跌3个基点&#xff0c;至…

Spring Cloud工程添加子模块打包后文件为war包而非jar包

Spring Cloud工程添加子模块打包后文件为war包而非jar包 Spring Cloud子模块打出的包通常是JAR包而非WAR包&#xff0c;这是因为Spring Cloud主要基于Spring Boot构建&#xff0c;而Spring Boot默认打包为可执行JAR包。然而&#xff0c;如果遇到了Spring Cloud子模块打成了WAR…

【论文阅读】SELF-RAG,让模型决策和反思检索

关于LLM何时使用RAG的问题&#xff0c;原本是阅读了关于ADAPT-LLM模型的那篇论文&#xff0c;被问到与SELF-RAG有何区别。所以&#xff0c;大概看了一下SELF-RAG这篇论文&#xff0c;确实很像&#xff0c;这些基于LLM针对下游任务的模型架构和方法&#xff0c;本来就很像。不过…

【Mybatis】源码分析-自定义框架

1、自定义持久层框架 1.1、分析JDBC操作问题 package blnp.net.cn.jvm.demos;import java.sql.*;/*** <p></p>** author lyb 2045165565qq.com* createDate 2024/5/24 14:24*/ public class JdbcTest {public static void main(String[] args) {Connection conne…

红酒保存中的软木塞与瓶身保护

云仓酒庄雷盛红酒&#xff0c;以其卓着的品质和精美的包装赢得了众多消费者的喜爱。在红酒的保存过程中&#xff0c;软木塞与瓶身保护是至关重要的环节。本文将深入探讨这两方面的问题&#xff0c;以帮助消费者更好地理解和欣赏云仓酒庄雷盛红酒。 首先&#xff0c;我们来谈谈软…

gitee上传整个项目文件夹

1.访问git官网并下载 Git 如下图&#xff1a; 点击download&#xff0c;然后选择合适的版本进行下载&#xff1a; 如下图&#xff0c;我下载的是2.32.0.2版本&#xff0c;64位windows版。 下载完之后&#xff0c;直接点击安装。 然后根据向导&#xff0c;一路默认到安装完成。…

SL3160 替换PN6008 耐压150V 降5V输出降压恒压芯片 脚位一样

在电子工程领域&#xff0c;芯片替换是一项常见且至关重要的任务。今天&#xff0c;我们将详细探讨SL3160芯片如何替换PN6008芯片&#xff0c;重点关注两者在耐压150V和降5V输出降压恒压方面的性能对比&#xff0c;以及它们脚位一致性的优势。 我们来了解一下SL3160和PN6008这两…

Java工程师的行业的生命周期

在现代商业环境中&#xff0c;理解行业的生命周期是每一个企业家、经理人以及市场分析师必须掌握的关键知识。行业的生命周期不仅决定了企业的战略方向&#xff0c;也影响着资源配置、产品开发、市场营销等各个方面。认识行业生命周期的重要性在于它能够帮助企业在不同的阶段采…

关于vue2 antd 碰到的问题总结下

1.关于vue2 antd 视图更新问题 1.一种强制更新 Vue2是通过用Object…defineProperty来设置数据的getter和setter实现对数据和以及视图改变的监听的。对于数组和对象这种引用类型来说&#xff0c;getter和setter无法检测到它们内部的变化。用这种 this.$set(this.form, "…

搜狗输入法的软键盘怎么关闭

我的搜狗输入法软件盘和typora中ctrlshiftk冲突了&#xff0c;关闭软键盘

2024.6.9周报

目录 摘要 ABSTRACT 一、文献阅读 1、相关信息 2、摘要 3、文献解读 1、Introduction 2、文章主要贡献 3、模型架构 4、实验 4、结论 二、代码实现 总结 摘要 本周我阅读了一篇题目为《Unlocking the Potential of Transformers in Time Series Forecasting with …

如何理解与学习数学分析——第二部分——数学分析中的基本概念——第8章——可微性

第2 部分&#xff1a;数学分析中的基本概念 (Concepts in Analysis) 8. 可微性(Differentiability) 本章讨论梯度(gradients)/斜率(slopes)和切线(tangent)&#xff0c;指出常见的误解并解释如何避免这些误解。将可微性的定义与图形表示联系起来&#xff0c;展示如何将其应用…

【2024】零基础Python 快速入门篇

2023年是AI的元年&#xff0c;AI的爆火不仅推动了科技领域的进步&#xff0c;更让 Python 语言成为了这一变革中的关键角色。 Python 语言简单易懂&#xff0c;语法清晰明了&#xff0c;懂一点英语的都能学得会。很适合在职场摸爬滚打多年的前端组长作为捅破天花板的语言&…

Linux服务器扩容及磁盘分区(LVM和非LVM)

Linux扩容及磁盘分区&#xff08;LVM和非LVM&#xff09; 本文主要介绍了阿里云服务器centos的扩容方法&#xff1a;非LVM分区扩容方法&#xff08;系统盘&#xff09;&#xff0c;以及磁盘改LVM并分区&#xff08;数据盘&#xff09;。主要是ext4文件系统及xfs磁盘scsi MBR分…