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

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

?? 八數(shù)碼問題程序.txt

?? 實現(xiàn)八數(shù)碼問題
?? TXT
字號:
// wangdan_qifashi.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <map>
#include <memory.h>
using namespace std;
#define SIZE 1000000

struct QUEUE{                                           //用順序結構定義一個最小二叉堆
 int data,pre,f,deep;
}heap[SIZE];                                               

int pout,tail,ter[3][3] = {{1,2,3},{8,0,4},{7,6,5}},sta[9];

struct OUT{
 int data,pre;
}out[SIZE];

void swap(QUEUE &a, QUEUE &b)                           //結構體交換值
{
 int temp = a.data; a.data = b.data; b.data = temp;
 temp = a.pre; a.pre = b.pre; b.pre = temp;
 temp = a.f; a.f = b.f; b.f = temp;
 temp = a.deep; a.deep = b.deep; b.deep = temp;
}

QUEUE pop()                                            //進堆
{
 int p,t;
 swap(heap[1],heap[tail]);
 tail--;
 p = 1;
 while((t = 2*p) <= tail){
  if(t+1 <= tail && heap[t].f > heap[t+1].f)
   t++;
  if(heap[p].f > heap[t].f){
   swap(heap[p],heap[t]);
   p = t;
  }
  else
   break;
 }
 return heap[tail+1];
}

void push(QUEUE a)                                        //出堆
{ 
 int p,t;
 tail++;
 heap[tail].data = a.data;
 heap[tail].f = a.f;
 heap[tail].pre = a.pre;
 heap[tail].deep = a.deep;
 p = tail;
 while((t = p/2) >= 1){
  if(heap[t].f > heap[p].f)
   swap(heap[t],heap[p]);
  else
   break;
 }
}

int nxnum(int p[9])                            //求逆序對
{
 int i,j,re = 0;
 for(i = 0; i < 8; i++){
  if(p[i] == 0)
   continue;
  for(j = i+1; j < 9; j++){
   if(p[j] == 0)
    continue;
   if(p[i] > p[j])
    re++;
  }
 }
 return re;
}

int H(int p[3][3])                            //估價函數(shù)h
{
 int i,j,re = 0;
 for(i = 0; i < 3; i++){
  for(j = 0; j < 3; j++){
   if(p[i][j] != ter[i][j])
    re++;
  }
 }
 return re;
}

bool astar(int s)                              // 啟發(fā)式搜索
{
 map<int,int>mp;
 tail = 1;
 heap[1].data = s;
 heap[1].pre = -1;
 heap[1].deep = 0;
 out[0].data = s;
 out[0].pre = -1;
 pout = 0;
 QUEUE tstatu,add;
 int temp[3][3],i,j,tf,x,y,tt[3][3];
 while(tail >= 1){
  tstatu = pop();
  out[++pout].data = tf = tstatu.data;
  out[pout].pre = tstatu.pre;
  for(i = 2; i >= 0; i--){
   for(j = 2; j >= 0; j--){
    temp[i][j] = tf%10;
    if(temp[i][j] == 0){
     x = i; 
     y = j;
    }
    tf /= 10;
   }
  }
  if(x > 0){                  // 上移
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     tt[i][j] = temp[i][j];
    }
   }
   tf = tt[x][y];
   tt[x][y] = tt[x-1][y];
   tt[x-1][y] = tf;
   tf = 0;
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     tf = tf*10 + tt[i][j];
    }
   }
   if(mp[tf] == 0){
    mp[tf] = 1;
    add.data = tf;
    add.deep = tstatu.deep+1;
    i = H(tt);
    add.f = add.deep + i;
    add.pre = pout;
    if(i == 0)
     return true;
    push(add);
   }
  }
  if(y > 0){                            //左移
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     tt[i][j] = temp[i][j];
    }
   }
   tf = tt[x][y];
   tt[x][y] = tt[x][y-1];
   tt[x][y-1] = tf;
   tf = 0;
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     tf = tf*10 + tt[i][j];
    }
   }
   if(mp[tf] == 0){
    mp[tf] = 1;
    add.data = tf;
    add.deep = tstatu.deep+1;
    i = H(tt);
    add.f = add.deep + i;
    add.pre = pout;
    if(i == 0)
     return true;
    push(add);
   }
  }
  if(x < 2){                                 //下移
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     tt[i][j] = temp[i][j];
    }
   }
   tf = tt[x][y];
   tt[x][y] = tt[x+1][y];
   tt[x+1][y] = tf;
   tf = 0;
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     tf = tf*10 + tt[i][j];
    }
   }
   if(mp[tf] == 0){
    mp[tf] = 1;
    add.data = tf;
    add.deep = tstatu.deep+1;
    i = H(tt);
    add.f = add.deep + i;
    add.pre = pout;
    if(i == 0)
     return true;
    push(add);
   }
  }
  if(y < 2){                           //右移
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     tt[i][j] = temp[i][j];
    }
   }
   tf = tt[x][y];
   tt[x][y] = tt[x][y+1];
   tt[x][y+1] = tf;
   tf = 0;
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     tf = tf*10 + tt[i][j];
    }
   }
   if(mp[tf] == 0){
    mp[tf] = 1;
    add.data = tf;
    add.deep = tstatu.deep;
    i = H(tt);
    add.f = add.deep + i;
    add.pre = pout;
    if(i == 0)
     return true;
    push(add);
   }
  }
 }
 return false;
}

int no = 1,ot[3][3];

void print(int k)                                  // 打印結果
{
 if(out[k].pre != -1){
  print(out[k].pre);
  int i,j,f = out[k].data,tt;
  printf("第%d步:\n",no++);
  for(i = 2; i >= 0; i--){
   for(j = 2; j >=  0; j--){
    ot[i][j] = f%10;
    f /= 10;
   }
  }
  for(i = 0; i < 3; i++){
   for(j = 0; j < 3; j++){
    if(ot[i][j] == 0)
     printf("  ");
    else
     printf("%d ",ot[i][j]);    
   }
   printf("\n");
  }
  printf("\n");
 }
}

int main()                                                //主函數(shù)
{
 int i,j,k,temp[9],s;
 bool used[9] = {0};
 char op[10];
 printf("----------------------\n");
 printf("|             八數(shù)碼問題求解程序:            |\n");
 printf("| 遙感院S071班      王丹      200722130012    |\n");
 printf("|         本程序采用的是啟發(fā)式搜索方法        |\n");
 printf("----------------------\n\n\n");
 printf("本程序默認目標狀態(tài)為:\n");
 for(i = 0; i < 3; i++){
  for(j = 0; j < 3; j++){
   printf("%d ",ter[i][j]);
  }
  printf("\n");
 }
 while(1){
  printf("是否想自定義目標狀態(tài)?是請輸入y,否請輸入n:");
  scanf("%s",op);
  if(op[0] == 'y'){
   printf("請參照上面的樣式輸入目標狀態(tài)(空白位置以0代替):\n");
   for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
     scanf("%d",&ter[i][j]);
    }
   }
  }
  else if(op[0] != 'n')
   printf("輸入錯誤!\n");
  else
   break;
 }
 while(1){
  printf("請參照上面的格式輸入初始狀態(tài)(空白位置以0代替):\n");
  k = 0;
  bool error = false;
  memset(used,0,sizeof(used));
  for(i = 0; i < 3; i++){
   for(j = 0; j < 3; j++){
    scanf("%d",&sta[k]);
    ot[i][j] = sta[k];
    if(used[sta[k]]){
     error = true;
    }
    used[sta[k]] = 1;
    temp[k++] = ter[i][j];
   }
  }
  int ts = nxnum(sta);
  int tt = nxnum(temp);
  if(error){
   printf("輸入錯誤(有相同數(shù)字出現(xiàn)),請重新輸入!\n");
   continue;
  }
  if((ts&1) != (tt&1)){
   printf("從初始狀態(tài)到不了目標狀態(tài),請重新輸入。\n");
  }
  else break;
 }
 if(H(ot) == 0){
  printf("所輸入狀態(tài)就是目標狀態(tài)!\n");
  return 0;
 }
 s = 0;
 for(i = 0; i < 9; i++){
  s = s*10 + sta[i];
 }
 astar(s);
 print(pout);
 printf("第%d步:\n",no);
 for(i = 0; i < 3; i++){
  for(j = 0; j < 3; j++){
   if(ter[i][j] == 0)
    printf("  ");
   else
    printf("%d ",ter[i][j]);
  }
  printf("\n");
 }
 printf("共走了%d步。\n",no);
 return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品高清不卡| 欧洲精品一区二区三区在线观看| 成人三级在线视频| 这里只有精品视频在线观看| 国产精品区一区二区三| 美女视频一区在线观看| 91久久精品日日躁夜夜躁欧美| 久久影院视频免费| 日日夜夜精品免费视频| 日本乱人伦一区| 国产精品欧美久久久久无广告| 麻豆一区二区三| 欧美日韩国产片| 亚洲精品日韩一| 成人激情午夜影院| 久久久一区二区三区捆绑**| 日韩成人av影视| 国产亚洲精品资源在线26u| 午夜精品福利久久久| 欧美网站大全在线观看| 亚洲日本护士毛茸茸| 成人一级片网址| 久久嫩草精品久久久久| 久久福利资源站| 日韩欧美亚洲国产精品字幕久久久| 亚洲国产毛片aaaaa无费看| 色婷婷久久久久swag精品| 最新日韩在线视频| 97se亚洲国产综合自在线不卡 | 欧美国产日韩亚洲一区| 久久丁香综合五月国产三级网站| 欧美精品123区| 日本免费在线视频不卡一不卡二| 欧美色图12p| 亚洲成人动漫精品| 欧美妇女性影城| 日本va欧美va瓶| 欧美一区二区三区四区高清| 偷拍日韩校园综合在线| 91精品国产一区二区| 日韩二区三区四区| 91精品婷婷国产综合久久竹菊| 五月激情综合婷婷| 91精选在线观看| 精品一区二区三区欧美| 久久精品欧美一区二区三区不卡| 国产二区国产一区在线观看| 日韩国产精品久久| 日韩你懂的在线播放| 久久99精品久久久久久国产越南 | 日韩精品一级中文字幕精品视频免费观看 | 精品88久久久久88久久久| 精品在线播放免费| 国产欧美一区二区在线观看| gogo大胆日本视频一区| 亚洲一区二区3| 欧美一级久久久| 国产成人在线影院| 亚洲欧美日韩在线播放| 91精品国产一区二区三区香蕉| 国产一区二区导航在线播放| 国产精品午夜春色av| 欧美色中文字幕| 激情另类小说区图片区视频区| 国产精品日韩成人| 欧美精品丝袜久久久中文字幕| 久久激情五月激情| 中文字幕中文字幕中文字幕亚洲无线| 在线精品视频小说1| 捆绑调教美女网站视频一区| 国产精品久久夜| 91精品国产综合久久久久久| 国产一二精品视频| 亚洲成人一区在线| 国产偷国产偷亚洲高清人白洁 | 老色鬼精品视频在线观看播放| 国产精品人人做人人爽人人添| 欧美午夜电影一区| 国产夫妻精品视频| 日韩三级电影网址| 美女一区二区视频| 综合在线观看色| 精品国产制服丝袜高跟| 色狠狠综合天天综合综合| 韩国午夜理伦三级不卡影院| 亚洲一二三四在线| 国产精品区一区二区三区| 欧美久久久影院| 91视频国产资源| 国产精品66部| 日韩高清不卡一区二区三区| 亚洲女同ⅹxx女同tv| 国产午夜一区二区三区| 日韩一区二区三区四区| 在线欧美日韩国产| 99精品热视频| 国产iv一区二区三区| 久久成人麻豆午夜电影| 婷婷六月综合亚洲| 亚洲尤物视频在线| 国产精品电影院| 亚洲国产精品精华液ab| 久久久久久久久一| 欧美sm极限捆绑bd| 日韩午夜激情视频| 欧美一区二视频| 7777精品伊人久久久大香线蕉超级流畅| 99国内精品久久| 国产成人99久久亚洲综合精品| 久久不见久久见免费视频7| 日韩av中文在线观看| 首页亚洲欧美制服丝腿| 午夜精品久久久久久久久| 亚洲一区二区三区在线看| 一区二区三区欧美| 国内精品伊人久久久久av影院| 欧美aaaaaa午夜精品| 日本成人超碰在线观看| 欧美aa在线视频| 久久er精品视频| 国产一区在线不卡| 国产成人午夜片在线观看高清观看| 紧缚捆绑精品一区二区| 国产麻豆成人精品| 国产69精品久久99不卡| 福利电影一区二区| 99久久精品国产麻豆演员表| 91亚洲国产成人精品一区二区三| 91麻豆蜜桃一区二区三区| 欧洲一区在线电影| 欧美日韩国产综合久久| 日韩视频免费观看高清完整版| 精品嫩草影院久久| 久久精品视频在线免费观看| 国产精品久久久爽爽爽麻豆色哟哟| 1024成人网| 五月激情综合网| 精品中文字幕一区二区| 成人伦理片在线| 91日韩一区二区三区| 欧美精品久久99久久在免费线 | 亚洲一二三四在线| 美女网站视频久久| 国产.欧美.日韩| 91成人在线精品| 欧美一区二区日韩| 欧美国产精品专区| 亚洲宅男天堂在线观看无病毒| 午夜国产不卡在线观看视频| 国产在线观看一区二区| 91免费在线视频观看| 欧美一区二区三区在线| 国产午夜精品一区二区三区四区| 一区二区视频免费在线观看| 美女视频黄a大片欧美| 成人黄色a**站在线观看| 欧美日韩国产免费| 国产日产精品一区| 亚洲成在人线免费| 国产成人亚洲综合色影视| 在线欧美一区二区| 国产情人综合久久777777| 亚洲123区在线观看| 国模冰冰炮一区二区| 欧美综合色免费| 欧美国产一区在线| 免费成人小视频| 色域天天综合网| 久久久久久综合| 丝袜亚洲另类欧美| 99riav一区二区三区| xnxx国产精品| 日韩在线卡一卡二| 色综合色狠狠综合色| 欧美精品一区二区三区蜜桃| 午夜精品一区二区三区三上悠亚| 国产91丝袜在线播放0| 日韩一区二区三区电影| 亚洲无人区一区| av影院午夜一区| 久久久精品tv| 久久99国产精品久久99果冻传媒| 欧美影院一区二区三区| 综合久久综合久久| 成人免费高清在线| 久久九九久久九九| 激情综合色播激情啊| 欧美一区国产二区| 午夜精品福利视频网站| 在线观看av不卡| 一区二区三区四区在线| 色综合久久综合网| 日韩毛片视频在线看| www.av亚洲| 最新国产の精品合集bt伙计| 丁香激情综合国产| 国产精品久久午夜| 99视频一区二区| 亚洲婷婷综合久久一本伊一区| 成人av在线电影|