美文网首页
算法之不撞南墙不回头

算法之不撞南墙不回头

作者: kikyoulzg | 来源:发表于2018-12-01 22:55 被阅读0次

话不多说,上代码

嘛,还是先说说我们面对的问题吧 (帅不过一秒的我)

问题其实很简单,输入一个数字n(范围1~9),然后求1~n的全排列。比如n=3,我们就要求123的全排列。高中的数学课也有全排列的问题,但一般不会让你一一列出就是了。

今个儿就用一种不撞南墙不回头的算法——深度优先算法来解决这个问题。

上代码

别急,咱先说说解决问题的思路(放下刀子,咱还是盆友)

就拿123的全排列来举个栗子。我们有分别标着1,2,3的三盒子以及分别标着1,2,3的三张牌。每个盒子只放一张牌,从盒1开始放,放牌顺序是先牌1,再2,最后3。所以,先把牌1放到盒1,接着把牌2放到盒2,接着把牌3放到盒3,一种排列出来了—— 123 ,我们不是要求全排列么,对,所以还没完,把牌3从盒3中拿出,我们想把另一张牌放入盒3然而并没有,只好去盒2,把牌2拿出,此时我们有两张牌,我们按照约定的顺序把牌3放进去(之前是牌2,所以现在到3),然后去到盒3把仅有的一张牌2放入——132就出来了,继续继续,把牌2从盒3拿出,去盒2,把牌3拿出(之前是3,所以现在放1,但没有),只好去盒1,把牌1拿出,按照约定的顺序把牌2放入,去盒2,把牌1放入,去盒3,把牌3放入——213出来了……以此类推,可以把231,312,321也求出来。

代码

#include <stdio.h>

int a[10],book[10],n; //用a[]表示盒子,book[]来记录手上有没有某张牌

void dfs(int step)
{
    int i;
    if(step == n + 1)
    {
        for(i = 1; i <= n; i++)
            printf("%d",a[i] );
        printf("\n");

        return;
    }

    //此时站在第step个盒子面前
    for(i = 1; i <= n; i++)
    {
        if(book[i] == 0)  //牌i在手上的意思
        {
            a[step] = i;
            book[i] = 1; //牌已不在手上
            dfs(step + 1); //骚气的开始
            book[i] = 0; //将刚才尝试的牌收回,进行下一次尝试
        }
    }
    return;
}

int main()
{
    scanf("%d",&n);
    dfs(1);
    getchar();getchar();
    return 0;
}

跟着代码走走

字丑加相机渣

吐槽

这玩意到底怎么想出来的
啊哈磊!你的书不给代码下载,我打字很累诶

相关文章

  • 2018.1.15

    不撞南墙不愿回头,到了南墙怎想回头。

  • 算法之不撞南墙不回头

    话不多说,上代码 嘛,还是先说说我们面对的问题吧 (帅不过一秒的我) 问题其实很简单,输入一个数字n(范围1~9)...

  • 不撞南墙不回头,并不可怕!可怕的是,我撞了南墙也不回头!

    我们都听过一句老话:不撞南墙不回头! 其实,不撞南墙不回头,并不可怕。 可怕的是,撞了南墙,我也不回头! 哪怕已经...

  • 无标题文章

    不撞南墙不回头,撞了南墙依旧回不了头。

  • 浩謇+1

    我就是不撞南墙不回头的人 撞到了也不回头 撞破了还不回头 还会把墙砌起来再撞 墙砌起来再撞 墙砌起来再撞 直到我不...

  • 该有

    我就是不撞南墙不回头的人 撞到了也不回头 撞破了还不回头 还会把墙砌起来再撞 墙砌起来再撞 墙砌起来再撞 直到我不...

  • 勇敢

    我就是不撞南墙不回头的人 撞到了也不回头 撞破了还不回头 还会把墙砌起来再撞 墙砌起来再撞 墙砌起来再撞 直到我不...

  • 堂无南墙而皇之, 那去哪撞南墙?

    常说不撞南墙不回头, 那么南墙在哪呢? 本文介绍古建筑之堂墙与影壁。 30s 总结 堂南无墙, 故而堂皇; 南墙,...

  • 王浴海:曾经捡拾的感知碎片

    O理念决定命运,态度决定生存。 0语云:不撞南墙不回头,可是,如果撞一次南墙要用十余年,回头还有...

  • 不撞南墙不回头

    撞不毁的南墙 流不尽的鲜血 哪有无尽的善意 哪有看得见你的上帝 你与爱情斗 多情总被无情负 你与友情斗 无言总败前...

网友评论

      本文标题:算法之不撞南墙不回头

      本文链接:https://www.haomeiwen.com/subject/ajorcqtx.html