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;

    }

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

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

  • 相关阅读:
    pymongo中的连接操作:Connection()与MongoClient()
    Dynamics CRM2016 新功能之从CRM APP通过电子邮件发送页面链接
    [开发工具]_[Sublime Text 2]_[配置C++编译执行环境]
    struts2 全局拦截器,显示请求方法和參数
    A. Polo the Penguin and Strings
    linux驱动之LED驱动_1
    dbgrid控件如何能在左边显示行号?
    软件提示“没有活动事务”原因以及解决办法
    刷新dbgrid 而不失去当前行位置
    用ClientDataSet更新数据表,怎样自动生成行号? [问题点数:40分]
  • 原文地址:https://www.cnblogs.com/wwxtju/p/4340569.html
Copyright © 2011-2022 走看看