zoukankan      html  css  js  c++  java
  • kinght的游荡

    首先是自己想写一些东西,如果继续拖延就是以后都不会写了,虽然很弱,但是下笔去写,总是会去思考的,然后大家一起进步(笑)。

    首先是罗凯布置的那道题:

    首先看到题目我的第一反应是深搜,试了一下果然可以,这是我的递归的代码(写代码和想的过程没有上网查阅任何资料,如有雷同,我也不知道是什么回事):

    const int xChange[8]={-2,-1,1,2,2,1,-1,-2};

    const int yChange[8]={1,2,2,1,-1,-2,-2,-1};

    //这是把那8步抽成对应的数组,下面直接来个for比较简单好看

    //但是身边有个哥们直接写了9if在那里,试起来却比我的快,不知道为什么,求解

    bool slove(int x,int y,int state[8][8],int sequence){

        state[x][y]=sequence;

        if(sequence==64)//这是真正的最终停止的条件,找到解

            return 1;

        for(int i=0,change=0;i<8;++i){

            int x1=x+xChange[i];

            int y1=y+yChange[i];//就是把棋盘看成X-O-Y平面,上面整点

            if(x1>=0&&x1<=7&&0<=y1&&y1<=7&&state[x1][y1]==0)

                if(slove(x1,y1,state,sequence+1))//通过这个if来调用下一个函数

                    change+=1;

            if(i==7&&change==0){//通过Change来判断这点是否有地方可走,

                state[x][y]=0;    //不可以走就是要退回去

                return 0;//通过0的返回来告诉那个IF的地方是不可以的,所以change    //+

            }

        }

        return 1;

    }

    看一下应该很容易就理解了,就是把自己一次次试的过程代码化:我们人工想就是,我一步步跳,知道跳入了一个封闭的地方,以及没地方可以跳下一步了,所以就回到上一步,来寻找下一个跳的地方。知道找到一个可行的解再输出,应该没错吧,各位。

    额,还要去上课,就简单地写这些,有空我看一些回溯的东西,再总结发出来。

  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/wwxtju/p/4340569.html
Copyright © 2011-2022 走看看