亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eightnumber.cpp

?? 八數碼問題的C++實現
?? CPP
字號:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "string.h"
#include <queue>
#include <stack>
using namespace std;

const int N=3;//3*3棋盤
const int Max_Step=30;//最大搜索深度

enum Direction{None,Up,Down,Left,Right};//方向
struct Chess//棋盤
{
    int cell[N][N];//數碼數組
    int Value;//評估值
    Direction BelockDirec;//所屏蔽方向
    struct Chess * Parent;//父節點
};

//打印棋盤
void PrintChess(struct Chess *TheChess)
{
    printf("------------------------------------------------------------------------\n");
    for(int i=0;i<N;i++)
    {
        printf("\t");
        for(int j=0;j<N;j++)
        {
            printf("%d\t",TheChess->cell[i][j]);
        }
        printf("\n");
    }
    printf("\t\t\t\t差距:%d\n",TheChess->Value);
}
//移動棋盤
struct Chess * MoveChess(struct Chess * TheChess,Direction Direct,bool CreateNewChess)
{
    struct Chess * NewChess;

    //獲取空閑格位置
    int i,j;
    for(i=0;i<N;i++)
    {
        bool HasGetBlankCell=false;
        for(j=0;j<N;j++)
        {
            if(TheChess->cell[i][j]==0)
            {
                HasGetBlankCell=true;
                break;
            }
        }
        if(HasGetBlankCell)
            break;
    }

    //移動數字
    int t_i=i,t_j=j;
    bool AbleMove=true;
    switch(Direct)
    {
    case Up:
        t_i++;
        if(t_i>=N)
            AbleMove=false;
        break;
    case Down:
        t_i--;
        if(t_i<0)
            AbleMove=false;
        break;
    case Left:
        t_j++;
        if(t_j>=N)
            AbleMove=false;
        break;
    case Right:
        t_j--;
        if(t_j<0)
            AbleMove=false;
        break;
    };
    if(!AbleMove)//不可以移動則返回原節點
    {
        return TheChess;
    }

    if(CreateNewChess)
    {
        NewChess=new Chess();
        for(int x=0;x<N;x++)
        {
            for(int y=0;y<N;y++)
                NewChess->cell[x][y]=TheChess->cell[x][y];
        }
    }
    else
        NewChess=TheChess;
    NewChess->cell[i][j]=NewChess->cell[t_i][t_j];
    NewChess->cell[t_i][t_j]=0;

    return NewChess;
}

//初始化一個初始棋盤
struct Chess * RandomChess(const struct Chess * TheChess)
{
    int M=30;//隨機移動棋盤步數
    struct Chess * NewChess;
    NewChess=new Chess();
    memcpy(NewChess,TheChess,sizeof(Chess));
    srand((unsigned)time(NULL));
    for(int i=0;i<M;i++)
    {    
        int Direct=rand()%4;
        //printf("%d\n",Direct);
        NewChess=MoveChess(NewChess,(Direction) Direct,false);
    }
    return NewChess;
}

//估價函數
int Appraisal(struct Chess * TheChess,struct Chess * Target)
{
    int Value=0;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            if(TheChess->cell[i][j]!=Target->cell[i][j])
                Value++;
        }
    }
    TheChess->Value=Value;
    return Value;
}

//搜索函數
struct Chess * Search(struct Chess* Begin,struct Chess * Target)
{
    Chess * p1,*p2,*p;
    int Step=0;//深度
    p=NULL;
    queue<struct Chess *> Queue1;
    Queue1.push(Begin);
    //搜索
    do{
        p1=(struct Chess *)Queue1.front();
        Queue1.pop();
        for(int i=1;i<=4;i++)//分別從四個方向推導出新子節點
        {
            Direction Direct=(Direction)i;
            if(Direct==p1->BelockDirec)//跳過屏蔽方向
                continue;
        
            p2=MoveChess(p1,Direct,true);//移動數碼
            if(p2!=p1)//數碼是否可以移動
            {
                Appraisal(p2,Target);//對新節點估價
                if(p2->Value<=p1->Value)//是否為優越節點
                {
                    p2->Parent=p1;
                    switch(Direct)//設置屏蔽方向,防止往回推
                    {
                    case Up:p2->BelockDirec=Down;break;
                    case Down:p2->BelockDirec=Up;break;
                    case Left:p2->BelockDirec=Right;break;
                    case Right:p2->BelockDirec=Left;break;
                    }
                    Queue1.push(p2);//存儲節點到待處理隊列
                    if(p2->Value==0)//為0則,搜索完成
                    {
                        p=p2;
                        i=5;
                    }
                }
                else 
                {
                    delete p2;//為劣質節點則拋棄
                    p2=NULL;
                }
            }
        }
        Step++;
        if(Step>Max_Step)
            return NULL;
    }while(p==NULL || Queue1.size()<=0);

    return p;
}

void main()
{
    Chess * Begin,Target,* T;
    //設定目標棋盤 [0 1 2],[3 4 5],[6 7 8]
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            Target.cell[i][j]=i*N+j;
        }
    }
    //獲取初始棋盤
    Begin=RandomChess(&Target);
    Appraisal(Begin,&Target);
    Begin->Parent=NULL;
    Begin->BelockDirec=None;
    Target.Value=0;
    printf("目標棋盤:\n");
    PrintChess(&Target);
    printf("初始棋盤:\n");
    PrintChess(Begin);
    //圖搜索
    T=Search(Begin,&Target);        
    //打印
    if(T)
    {
        /*把路徑倒序*/
        Chess *p=T;
        stack<Chess *>Stack1;
        while(p->Parent!=NULL)
        {
            Stack1.push(p);
            p=p->Parent;
        }
        printf("搜索結果:\n");
        while(!Stack1.empty())
        {
            PrintChess(Stack1.top());
            Stack1.pop();
        }
        printf("\n完成!");
    }else
        printf("搜索不到結果.深度為%d\n",Max_Step);

    scanf("%d",T);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
2020国产精品自拍| 欧美一激情一区二区三区| 国产老女人精品毛片久久| 麻豆精品视频在线观看免费| 美女www一区二区| 九色|91porny| 国产ts人妖一区二区| 国产一区二区三区四区五区入口 | 亚洲国产日韩在线一区模特| 亚洲最新视频在线观看| 亚洲国产一区在线观看| 日韩成人一级大片| 欧美伊人久久久久久午夜久久久久| 日本欧美韩国一区三区| 天堂午夜影视日韩欧美一区二区| 亚洲一区二区三区国产| 亚洲a一区二区| 国产一区二区视频在线播放| 成人午夜又粗又硬又大| 91电影在线观看| 欧美一区永久视频免费观看| 欧美第一区第二区| 综合久久一区二区三区| 亚洲成a人v欧美综合天堂 | 91精品在线观看入口| 日韩欧美亚洲国产精品字幕久久久| 91.成人天堂一区| 91精品国产欧美日韩| 国产欧美一区二区精品忘忧草| 中文文精品字幕一区二区| 一级中文字幕一区二区| 日韩av高清在线观看| 国产91色综合久久免费分享| 在线免费观看一区| 2020日本不卡一区二区视频| 亚洲永久免费av| 精品一区二区在线看| 欧美综合一区二区| 国产精品久久久久久久裸模 | 精品国产乱码久久久久久久| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲国产视频直播| 成人av电影免费观看| 色婷婷av久久久久久久| 精品久久久久久久久久久久久久久久久| 国产色产综合产在线视频| 日日摸夜夜添夜夜添国产精品 | 日本不卡视频在线| 色婷婷亚洲一区二区三区| 国产网站一区二区| 青青国产91久久久久久| 欧美日韩色一区| 亚洲婷婷在线视频| www.日韩大片| 精品久久人人做人人爰| 亚洲高清免费视频| 91国偷自产一区二区三区观看| 国产日韩成人精品| 国产伦精品一区二区三区免费| 欧美视频一区在线| 亚洲精品国产第一综合99久久 | 亚洲成a人v欧美综合天堂| 一本一道久久a久久精品 | 国模大尺度一区二区三区| 欧洲精品视频在线观看| 亚洲日本中文字幕区| www.亚洲精品| 亚洲欧洲精品一区二区精品久久久| 国内外成人在线| 久久综合色8888| 国产精品资源站在线| 久久嫩草精品久久久久| 韩国av一区二区| 久久久久久久久久久久久女国产乱| 日韩va亚洲va欧美va久久| 91精品国产免费| 日韩极品在线观看| 日韩美女主播在线视频一区二区三区 | 亚洲黄色片在线观看| 色综合久久综合网欧美综合网 | 久草这里只有精品视频| 日韩精品一区二区三区在线播放 | 欧美tickling挠脚心丨vk| 蜜桃久久久久久久| 亚洲精品在线观看网站| 成人性生交大片免费看中文网站 | 欧美日韩成人一区二区| 日韩中文字幕1| 精品福利二区三区| 福利视频网站一区二区三区| 亚洲欧美国产77777| 欧美午夜不卡在线观看免费| 久久精品免费看| 亚洲国产精品一区二区久久| 欧美精品在线一区二区| 国产综合色产在线精品| 国产精品成人免费| 欧美视频一区二区三区| 免费在线观看一区二区三区| 国产日韩成人精品| 91福利视频网站| 日本欧洲一区二区| 国产精品日产欧美久久久久| 99久久精品99国产精品| 视频一区国产视频| 国产精品萝li| 91精品国产福利| eeuss鲁片一区二区三区在线看| 亚洲一区在线观看免费观看电影高清| 日韩欧美国产小视频| av不卡一区二区三区| 看电视剧不卡顿的网站| 亚洲免费在线看| 久久久久久久久久久黄色| 在线观看一区不卡| 粉嫩av一区二区三区在线播放 | 蜜臀久久久99精品久久久久久| 国产欧美精品一区二区色综合朱莉| 在线观看视频91| 粗大黑人巨茎大战欧美成人| 日韩电影免费在线看| 自拍偷拍亚洲欧美日韩| 久久嫩草精品久久久精品| 欧美日韩日日骚| 色菇凉天天综合网| 成人性生交大合| 激情五月激情综合网| 天堂av在线一区| 伊人色综合久久天天人手人婷| 国产欧美日韩在线看| 欧美精品一区二区蜜臀亚洲| 91.xcao| 欧美乱妇23p| 欧美亚洲自拍偷拍| 97精品国产露脸对白| 成人性生交大合| 国产69精品久久99不卡| 国产精品一线二线三线精华| 免费看欧美美女黄的网站| 婷婷综合五月天| 亚洲一区日韩精品中文字幕| 亚洲女同ⅹxx女同tv| 欧美激情一区二区三区四区| 亚洲午夜一区二区三区| 亚洲综合自拍偷拍| 欧美国产一区在线| 久久久久亚洲综合| 精品国产麻豆免费人成网站| 日韩欧美国产综合在线一区二区三区| 欧美精品色一区二区三区| 欧美性欧美巨大黑白大战| 日本韩国欧美一区| 色综合天天综合网国产成人综合天| 波多野洁衣一区| www.欧美.com| 91亚洲男人天堂| 欧美亚洲国产一区二区三区| 欧美色老头old∨ideo| 欧美久久婷婷综合色| 717成人午夜免费福利电影| 欧美亚洲高清一区二区三区不卡| 欧洲亚洲精品在线| 这里只有精品电影| 久久一夜天堂av一区二区三区| 久久久久久一二三区| 国产清纯白嫩初高生在线观看91 | youjizz久久| gogo大胆日本视频一区| 色婷婷av久久久久久久| 欧美伊人精品成人久久综合97| 欧美曰成人黄网| 3d动漫精品啪啪1区2区免费| 欧美v日韩v国产v| 欧美激情在线一区二区三区| 国产精品盗摄一区二区三区| 亚洲精品国产视频| 免费成人小视频| 成人av网在线| 欧美日韩精品欧美日韩精品一| 精品久久久影院| 中文字幕一区不卡| 日日摸夜夜添夜夜添精品视频 | 污片在线观看一区二区| 日韩一区精品字幕| 成人一级黄色片| 欧美日韩卡一卡二| 久久综合给合久久狠狠狠97色69| 亚洲欧美一区二区视频| 丝袜脚交一区二区| 97精品国产97久久久久久久久久久久| 欧美精品国产精品| 中文字幕在线不卡一区二区三区| 午夜影院久久久| 成人a级免费电影| 日韩视频一区二区| 一级精品视频在线观看宜春院| 激情综合色丁香一区二区| 99在线视频精品| 久久网这里都是精品| 日韩二区在线观看|