突然想到一个不使用递归的方法

P1219 [USACO1.5] 八皇后 Checker Challenge

NiII_CMeNOH_2 @ 2024-11-26 11:50:43

(稍微讲一下思路,大约不算题解吧?)

大概想法就是用静态数组模拟栈,再用栈+循环模拟递归

那么我们先定义一个数组zb[14]并且初始化为0,然后定义一个整数ptr模拟指针

根据题意,我们需要做出三个解

所以第一层循环就是一个while循环,确保写完三个解以后退出循环:

while(flag<3){
......
}

在循环中,我们假设在进入某一次循环时已经放下的棋子是互相不能吃的

那么我们在某一次循环中的任务就很明确了: a.如果已经放下了n枚棋子,那么输出zb[14],弹出栈顶元素(ptr--;zb[ptr]++)即可;

b.如果已放下的棋子个数小于n,那么尝试放下一枚棋子;

c.如果无法放下n枚棋子(zb[ptr]==n),那么弹出栈顶元素(ptr--;zb[ptr]++);

题目大约是默认了必然能够给出三个以上答案的,所以我们没有必要处理栈被弹空的情况。

这是一个蒟蒻写给其他蒟蒻看的,大佬们轻点喷(


by LionBlaze @ 2024-11-26 12:37:29

tlqtj,jbl.


by tangzirui1016 @ 2024-11-26 12:40:43

@NiII_CMeNOH_2 其实 c++ 的递归内部是使用栈实现的


by CatFromMars @ 2024-11-26 13:57:30

这正常交流做法有什么好举报的。

lz 的做法是不是模拟递归的堆栈 qwq?


by mayike @ 2024-11-26 14:07:42

@CatFromMars 讨论区题解是会被jb(我就被jb过


by NiII_CMeNOH_2 @ 2024-12-04 14:23:41

@CatFromMars

lz是废柴大学生,专有名词听不懂啦


|