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

1167. 【宽度优先搜索BFS】数字交换游戏(保姆教程)(打破垄断)

文章目录

  • 题目描述
  • 输入
  • 输出
  • 样例输入
      • 样例输入1
      • 样例输入2
      • 样例输入3
  • 样例输出
      • 样例输出1
      • 样例输出2
      • 样例输出3
  • AC代码

题目描述

小明已经是中学生了,他喜欢研究数字,觉得最漂亮的数就是整数了。一次小明写下一个M位的整数(无前导0),他想研究下面这个游戏:每次取其中两位交换,会得到一个新的整数------但不能有前导0出现,即第一位不能变成0。这样连续做K次,最后能得到的最大整数是多少?

输入

第一行:两个整数N(1<=N<=1000000)和K(1<=K<=10)

输出

只有一行,一个整数,表示变化后最大数,如果不能变换则输出-1

样例输入

样例输入1

16375 1

样例输入2

432 1

样例输入3

90 4

样例输出

样例输出1

76315

样例输出2

423

样例输出3

-1

AC代码

#include <stdio.h>
#include <algorithm>
#include <string.h>

int n, k, vis[1000005][12], ans = -1;
void dfs(int deep, int val, int cur)
{
	if (deep == cur) // 递归边界
	{
		ans = std::max(ans, val);
		return ;
	}
	else
	{
		char fstr[12] = {0};
		sprintf(fstr, "%d", val);
		int Size = strlen(fstr);

		for (int i = 0; i < Size; i++)
			for (int j = i + 1; j < Size; j++)
			{
				char tstr[12] = {0};
				strcpy(tstr, fstr);
				std::swap(tstr[i], tstr[j]);
				if (tstr[0] == '0') continue;
				int p = atoi(tstr);
				if (!vis[p][cur])
				{
					vis[p][cur] = 1;
					dfs(deep, p, cur + 1);
				}
			}
	}
}
int main()
{
	scanf("%d%d", &n, &k);
	dfs(k, n, 0);

	printf("%d", ans);
	return 0;
}

相关文章:

  • ffmepg介绍(二)——解码
  • FlauBERT:面向法语的无监督语言模型预训练
  • 《人工智能赋能网络拓扑分析:洞察关键节点与脆弱链路》
  • 好吧好吧,看一下达梦的模式与用户的关系
  • 数据库数值函数详解
  • 二分查找------查找区间
  • 进程间通信 ─── linux第22课
  • STM32 的tf卡驱动
  • DAY37 动态归化Ⅰ基础题目
  • 深入LangChain:LLM交互机制与RAG集成的技术
  • 三主热备架构
  • 原生微信小程序基础语法--快速总结
  • 架构师面试(二十):CAP 定理
  • 自定义mavlink 生成wireshark wlua插件错误(已解决)
  • 【拒绝算法PUA】LeetCode 2116. 判断一个括号字符串是否有效
  • VLM理解(一)——视觉文本信息的标注与数据集制作过程
  • 第十一章 | 智能合约主网部署与验证详解
  • 6、linux c 线程 -下
  • 同旺科技USB to I2C 适配器 ---- 多从机设备混合调试
  • 关于解决Ubuntu终端及系统字体大小的问题
  • 北上广深还是小城之春?“五一”想好去哪玩了吗
  • 人民日报头版:上海纵深推进浦东高水平改革开放
  • 孟泽:我们简化了历史,因此也简化了人性
  • QFII一季度现身超300家公司:持有南京银行市值最高,5家青睐立航科技
  • “70后”通化市委书记孙简已任吉林省政府领导
  • 迎接神十九乘组回家,东风着陆场各项工作已准备就绪