当前位置: 首页 > news >正文

UVA-225 黄金图形 题解答案代码 算法竞赛入门经典第二版

GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版

一道不难的题目,即使不用什么剪枝方法,也不会超时,可以AC的。

但是题目有一些隐含条件(或者说是我英语差一些,这道题的有些要求和题目背景放在一起描述,但是这个题目背景我没完全读懂)

首先要根据字典序输出,即'e', 'n', 's', 'w'

然后输入中哪些的阻碍的块是不能穿过的,即使移动起点和终点不在阻碍块上,只是中间路过也不行。

还有,已经访问过的块不能再次被访问,注意这里限制的是每次移动的起点和终点,中间路过已访问过的块是可以的,路过也不能称作“已访问”。

所以实际上是有两种逻辑不同的限制块类型。

AC代码

#include <stdio.h>
#include <string.h>
#define LINENUMMAX 22
#define MAXBLOCKNUM 51int lineNumMax;
// 当前的
int line[LINENUMMAX];
// 全部的
int totalNum;
int lintTotal[5000][LINENUMMAX];
// 已访问过的块
int map[500][500];// 序号从 1 开始
// n上 s下 e右 w左
// 数字 到 字母 字典序
char num2str[5] = {0, 'e', 'n', 's', 'w'};
// 方向对应的坐标移动
char steps[5][2] = {{}, {1, 0}, {0, 1}, {0, -1}, {-1, 0}};
// 方向对应的转90度方向
int truns[5][2] = {{}, {2, 3}, {1, 4}, {1, 4}, {2, 3}};void init()
{int i, x, y, n;scanf("%d", &lineNumMax);scanf("%d", &n);memset(map, 0, sizeof(map));memset(line, 0, sizeof(line));memset(lintTotal, 0, sizeof(lintTotal));for (i = 0; i < n; ++i){scanf("%d %d", &x, &y);map[x + 250][y + 250] = 2;}totalNum = 0;
}// 判断向当前方向走,会不会碰到阻碍 注意这里是移动之前判断
// n 当前长度 i 上一次方向 x,y 当前坐标 xnew ynew 新坐标
bool hasBlock(int i, int x, int y, int xnew, int ynew)
{int a;if (i == 1){for (a = x + 1; a <= xnew; ++a)if (map[a + 250][y + 250] == 2)return true;}if (i == 2){for (a = y + 1; a <= ynew; ++a)if (map[x + 250][a + 250] == 2)return true;}if (i == 3){for (a = ynew; a < y; ++a)if (map[x + 250][a + 250] == 2)return true;}if (i == 4){for (a = xnew; a < x; ++a)if (map[a + 250][y + 250] == 2)return true;}return false;
}// n 当前长度 i 上一次方向 x,y 当前坐标
void dfs(int n, int i, int x, int y)
{int a, newi, xnew, ynew;if (x == 0 && y == 0 && n == lineNumMax){for (a = 0; a < lineNumMax; ++a)lintTotal[totalNum][a] = line[a];totalNum++;return;}if (n >= lineNumMax)return;map[x + 250][y + 250] = 1;for (a = 0; a < 2; ++a){newi = truns[i][a];xnew = x + (n + 1) * steps[newi][0];ynew = y + (n + 1) * steps[newi][1];if (map[xnew + 250][ynew + 250] || hasBlock(newi, x, y, xnew, ynew))continue;line[n] = newi;dfs(n + 1, newi, xnew, ynew);}map[x + 250][y + 250] = 0;
}void computed()
{int i, j;int x, y;// 四个方向都走一遍for (i = 1; i < 5; ++i){line[0] = i;x = steps[i][0];y = steps[i][1];if (map[x + 250][y + 250])continue;dfs(1, i, x, y);}
}int main()
{int co, i, j;scanf("%d", &co);while (co--){init();computed();for (i = 0; i < totalNum; ++i){for (j = 0; j < lineNumMax; ++j)printf("%c", num2str[lintTotal[i][j]]);putchar('\n');}printf("Found %d golygon(s).\n\n", totalNum);}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue路由配置、网络请求访问框架项目、element组件介绍学习
  • 数据在内存中的存储方式
  • 测试-Gatling 与性能测试
  • 达梦数据库对象管理(一):分区表、外部表、临时表
  • Big Data 流处理框架 Flink
  • 【LeetCode】每日一题 2024_9_16 公交站间的距离(模拟)
  • 进程监控与管理详解
  • 华为HarmonyOS地图服务 -- 如何实现地图呈现?-- HarmonyOS自学8
  • Ubuntu24.04部署docker
  • xtu oj 锐角三角形
  • PowerShell install 一键部署Oracle23ai
  • js中【argument】知识点详解
  • 技术选型对SQL与NoSQL以及Mysql,Hbase,Hive使用特性差别
  • Spring Boot-Bean注入问题
  • 无人机飞手教员组装、调试高级教学详解
  • [iOS]Core Data浅析一 -- 启用Core Data
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java 内存分配及垃圾回收机制初探
  • JS题目及答案整理
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • log4j2输出到kafka
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 浅谈Golang中select的用法
  • 突破自己的技术思维
  •  一套莫尔斯电报听写、翻译系统
  • 异步
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ‌移动管家手机智能控制汽车系统
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #includecmath
  • $forceUpdate()函数
  • (21)起落架/可伸缩相机支架
  • (bean配置类的注解开发)学习Spring的第十三天
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (九)c52学习之旅-定时器
  • (一)SvelteKit教程:hello world
  • *1 计算机基础和操作系统基础及几大协议
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET BackgroundWorker
  • .net wcf memory gates checking failed
  • .net反编译的九款神器
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @Autowired和@Resource装配
  • @component注解的分类
  • @NotNull、@NotEmpty 和 @NotBlank 区别
  • @Valid和@NotNull字段校验使用
  • [ 蓝桥杯Web真题 ]-布局切换
  • [001-03-007].第07节:Redis中的事务
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C++] 小游戏 斗破苍穹 2.11.6 版本 zty出品
  • [CERC2017]Cumulative Code
  • [CISCN 2019华东南]Web11