新聞中心

        回溯算法1

        作者: 時間:2016-12-01 來源:網絡 收藏

        for(i=0;i<5;i++)
        {
        if(Fz[i].yp==1){
        if(i==0)if(Fz[1].yl!=5&&Fz[1].cw!=0) return 1;
        if(i==4)if(Fz[3].yl!=5&&Fz[3].cw!=0) return 1;
        if((Fz[i].yp==1)&&((Fz[i-1].yl!=5&&Fz[i-1].yl!=0)&&(Fz[i+1].yl!=5&&Fz[i+1].yl!=0))) return 1;
        }
        }
        //抽Blends香煙的人有一個喝水的鄰居
        return 0;
        }

        int TuiLi::go()//推理類執行入口點
        {
        int i,c=0;
        for(i=0;i<25;i++)sz[i]=0;
        //回溯根節點初始值,調整這個值能調整回溯進度
        sz[0]=1;
        gx();
        i=0;
        while(1)
        {
        if(sz[i]<=5)
        {
        //回溯點取值在正常范圍內
        if(OK())
        {
        //如果和剪枝條件沖突,嘗試下一個可用值
        sz[i]++;
        gx();
        continue;
        }
        if(i>=24)
        {
        //已經到了最后一個節點
        print();
        //然后嘗試找到其它的解
        sz[24]++;
        gx();
        c++;
        continue;
        }
        //回溯點值沒有產生沖突擴展他嘗試開始下一個節點
        i++;
        sz[i]=1;
        gx();

        }else
        {
        //超過回溯點取值范圍
        //此回溯點已死復位
        sz[i]=0;
        gx();
        //退回前一回溯點
        i--;
        if(i<0)
        {
        printf("已經找出推理題所有解共有:%d個解!",c);
        return 1;
        }
        //嘗試對上一回溯點進行擴展
        sz[i]++;
        gx();
        continue;
        }
        }

        return 0;

        }
        void TuiLi::sd_in()
        {
        int i,j,z=0;
        for(i=0;i<81;i++)sudu_ji[i]=0;
        for(i=0;i<81;i++)sudu[i]=0;

        for(i=0;i<9;i++)
        for(j=0;j<9;j++)
        {
        sudu[z]=SD[i][j];
        if(SD[i][j]!=0)
        {
        sudu_ji[z]=1;
        }
        z++;
        }
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 新巴尔虎右旗| 绥芬河市| 花莲县| 抚州市| 信丰县| 娄烦县| 巫山县| 巴楚县| 阿城市| 柞水县| 延安市| 青龙| 富蕴县| 禄劝| 沙田区| 浦江县| 江门市| 蛟河市| 澜沧| 剑河县| 莱阳市| 南开区| 田东县| 潞城市| 大厂| 永新县| 沙田区| 张家港市| 高清| 佛山市| 古浪县| 浦东新区| 绿春县| 漠河县| 垫江县| 梁平县| 永善县| 宝鸡市| 汉阴县| 中卫市| 浪卡子县|