青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The Fourth Dimension Space

枯葉北風(fēng)寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢(mèng)令

ACRUSH(樓天成)八數(shù)碼問題源代碼

題目描述
八方塊移動(dòng)游戲要求從一個(gè)含8個(gè)數(shù)字(用1-8表示)的方塊以及一個(gè)空格方塊(用0表示)的3x3矩陣的起始狀態(tài)開始,不斷移動(dòng)該空格方塊以使其和相鄰的方塊互換,直至達(dá)到所定義的目標(biāo)狀態(tài)。空格方塊在中間位置時(shí)有上、下、左、右4個(gè)方向可移動(dòng),在四個(gè)角落上有2個(gè)方向可移動(dòng),在其他位置上有3個(gè)方向可移動(dòng)。例如,假設(shè)一個(gè)3x3矩陣的初始狀態(tài)為:
   8 0 3
   2 1 4
   7 6 5
目標(biāo)狀態(tài)為:
   1 2 3
   8 0 4
   7 6 5
則一個(gè)合法的移動(dòng)路徑為:
   8 0 3    8 1 3    8 1 3    0 1 3    1 0 3    1 2 3
   2 1 4 => 2 0 4 => 0 2 4 => 8 2 4 => 8 2 4 => 8 0 4
   7 6 5    7 6 5    7 6 5    7 6 5    7 6 5    7 6 5

另外,在所有可能的從初始狀態(tài)到目標(biāo)狀態(tài)的移動(dòng)路徑中,步數(shù)最少的路徑被稱為最短路徑;在上面的例子中,最短路徑為5。如果不存在從初試狀態(tài)到目標(biāo)狀態(tài)的任何路徑,則稱該組狀態(tài)無解。

請(qǐng)?jiān)O(shè)計(jì)有效的(細(xì)節(jié)請(qǐng)見評(píng)分規(guī)則)算法找到從八方塊的某初試狀態(tài)到某目標(biāo)狀態(tài)的所有可能路徑中的最短路徑,并用C/C++實(shí)現(xiàn)。

輸入數(shù)據(jù)
程序需讀入已被命名為start.txt的初始狀態(tài)和已被命名為goal.txt的目標(biāo)狀態(tài),這兩個(gè)文件都由9個(gè)數(shù)字組成(0表示空格,1-8表示8個(gè)數(shù)字方塊),每行3個(gè)數(shù)字,數(shù)字之間用空格隔開。

輸出數(shù)據(jù)
如果輸入數(shù)據(jù)有解,輸出一個(gè)表示最短路徑的非負(fù)的整數(shù);如果輸入數(shù)據(jù)無解,輸出-1。

自測用例
如果輸入為:start.txtgoal.txt,則產(chǎn)生的輸出應(yīng)為:
5

又例,如果用
7 8 4
3 5 6
1 0 2
替換start.txt中的內(nèi)容,則產(chǎn)生的輸出應(yīng)為:
21

評(píng)分規(guī)則
1)我們將首先使用和自測用例不同的10個(gè)start.txt以及相同的goal.txt,每個(gè)測試用例的運(yùn)行時(shí)間在一臺(tái)Intel Xeon 2.80GHz 4 CPU/6G 內(nèi)存的Linux機(jī)器上應(yīng)不超過10秒(內(nèi)存使用不限制),否則該用例不得分;

2)每個(gè)選手的總分(精確到小數(shù)點(diǎn)后6位)=10秒鐘內(nèi)能產(chǎn)生正確結(jié)果的測試用例數(shù)量x10+(1/產(chǎn)生這些正確結(jié)果的測試用例的平均運(yùn)行毫秒);

3)如果按此評(píng)分統(tǒng)計(jì)仍不能得出總決賽將決出的一、二、三等獎(jiǎng)共計(jì)九名獲獎(jiǎng)?wù)撸覀儗⑾仍O(shè)N=2,然后重復(fù)下述過程直至產(chǎn)生最高的9位得分:用隨機(jī)生成的另外10個(gè)有解的start.txt再做測試,并對(duì)這10*N個(gè)測試用例用2)中公式重新計(jì)算總分,N++。



//冠軍ACRush的代碼: 
//轉(zhuǎn)載自:http://star.baidu.com/data/demo/ACRush.txt 

#include 
<stdio.h> 
#include 
<stdlib.h> 
#include 
<string.h> 

const int hashsize=70001
const int maxnode=50000
const int maxp=40
const int ten[]={1,10,100,1000,10000,100000,1000000,10000000,100000000}
const int C[]={2,3,2,3,4,3,2,3,2}
const int EP[][4]={{1,3,0,0},{0,2,4,0},{1,5,0,0},{0,4,6,0},{1,3,5,7},{2,4,8,0},{3,7,0,0},{4,6,8,0},{5,7,0,0}}

struct Tlist 

  
int data,d; 
  Tlist 
*next; 
}

struct Thashpoint 

  
int data; 
  Thashpoint 
*next; 
}

//Memory 
int ID; 
Tlist listM[maxnode],
*q; 
Thashpoint hashM[maxnode],
*p; 
//data 
int src,dest; 
//heap 
Tlist *head[maxp],*expand[maxp],*lp1,*lp2; 
//Hash 
Thashpoint *hash[hashsize]; 
//expand 
int nowp,A[9],arcT[9],dist[9][9],b,depth,swap[9][9]; 
int data,G,newdata,newG; 
bool find_answer; 

void readdata(const char *filename,int &data) 

  
int i,v; 
  FILE 
*f=fopen(filename,"r"); 
  data
=0
  
for (i=0;i<9;i++
  

    fscanf(f,
"%d",&v); 
    data
=data+v*ten[i]; 
  }
 
  fclose(f); 
}
 
bool check_noanswer() 

  
int p[9],i,b1,b2; 
  
bool vis[9]; 
  
for (i=0;i<9;i++
    p[i]
=arcT[src/ten[i]%10]; 
  
for (b1=0; src/ten[b1]%10!=0;b1++); 
  
for (b2=0;dest/ten[b2]%10!=0;b2++); 
  
int countP=0
  memset(vis,
false,sizeof(vis)); 
  
for (i=0;i<9;i++
    
if (!vis[i]) 
    

      countP
++
      
for (int k=i;!vis[k];k=p[k]) 
        vis[k]
=true
    }
 
  
return (countP-dist[b1][b2])%2==0
}
 
void preprocess() 

  ID
=0
  find_answer
=false
  memset(hash,
0,sizeof(hash)); 
  memset(head,
0,sizeof(head)); 
  memset(expand,
0,sizeof(expand)); 
  
for (int k=0;k<9;k++
    arcT[dest
/ten[k]%10]=k; 
  
for (int u=0;u<9;u++
    
for (int v=0;v<9;v++
    

      dist[u][v]
=abs(u/3-v/3)+abs(u%3-v%3); 
      swap[u][v]
=ten[u]-ten[v]; 
    }
 
}
 
void addnode() 

  
if (newdata==dest) 
  

    printf(
"%d\n",depth); 
    find_answer
=true
    
return
  }
 
  
int address=newdata%hashsize; 
  
for (p=hash[address];p!=NULL;p=p->next) 
    
if (p->data==newdata) 
      
return
  
if (ID==maxnode) 
    
return
  p
=&hashM[ID]; 
  p
->data=newdata; 
  p
->next=hash[address]; 
  hash[address]
=p; 
  q
=&listM[ID]; 
  ID
++
  q
->data=newdata; 
  q
->d=depth; 
  
if (newG>=maxp) 
    
return
  
if (newG==nowp) 
  

    q
->next=expand[depth]; 
    expand[depth]
=q; 
  }
 
  
else 
  

    q
->next=head[newG]; 
    head[newG]
=q; 
  }
 
}
 
void solve() 

  nowp
=-1
  newdata
=src; 
  newG
=0
  
for (int k=0;k<9;k++
    
if (src/ten[k]%10!=0
      newG
+=dist[arcT[src/ten[k]%10]][k]; 
  depth
=0
  addnode(); 
  
if (find_answer) 
    
return
  
for (int p=0;p<maxp;p++if (head[p]!=NULL) 
  

    nowp
=p; 
    
for (lp1=head[p];lp1!=NULL;lp1=lp2) 
    

      lp2
=lp1->next; 
      lp1
->next=expand[lp1->d]; 
      expand[lp1
->d]=lp1; 
    }
 
    
for (int d=0;d<=p;d++
      
for (;expand[d]!=NULL;) 
      

        data
=expand[d]->data; 
        G
=p-expand[d]->d; 
        depth
=expand[d]->d+1
        expand[d]
->d=-2
        expand[d]
=expand[d]->next; 
        
for (b=0;data/ten[b]%10!=0;b++); 
        
for (int v=0;v<C[b];v++
        

          
int u=EP[b][v]; 
          
int c=data/ten[u]%10
          newdata
=data+swap[b][u]*c; 
          c
=arcT[c]; 
          newG
=depth+G-dist[c][u]+dist[c][b]; 
          addnode(); 
          
if (find_answer) 
            
return
        }
 
      }
 
  }
 
  printf(
"-1\n"); 
}
 
int main() 

  readdata(
"start.txt",src); 
  readdata(
"goal.txt",dest); 
  preprocess(); 
  
if (check_noanswer()) 
    printf(
"-1\n"); 
  
else 
    solve(); 
  
return 0
}
 

posted on 2009-05-22 02:24 abilitytao 閱讀(18335) 評(píng)論(6)  編輯 收藏 引用

評(píng)論

# re: ACRUSH(樓天成)八數(shù)碼問題源代碼 2009-11-22 19:56 張甡華

八數(shù)碼問題存在沒解的可能性嗎?(排除目標(biāo)不是初始狀態(tài)的一個(gè)排列的情況)

qq:46522649  回復(fù)  更多評(píng)論   

# re: ACRUSH(樓天成)八數(shù)碼問題源代碼 2010-12-10 12:47 zlly

orz abilitytao   回復(fù)  更多評(píng)論   

# re: ACRUSH(樓天成)八數(shù)碼問題源代碼 2011-09-28 22:23 夜痕

@張甡華
應(yīng)該是存在的  回復(fù)  更多評(píng)論   

# re: ACRUSH(樓天成)八數(shù)碼問題源代碼 2015-04-07 22:09 cai ji

我嚴(yán)重懷疑樓天城違反比賽規(guī)則,依我看樓天城用的是c的代碼 卻用的是c++的編譯器
c里面不可能struct 這么定義這么實(shí)用的。必須有struct符號(hào),而且看他的代碼很多處還實(shí)用引用這個(gè)c里面沒有的概念  回復(fù)  更多評(píng)論   

# re: ACRUSH(樓天成)八數(shù)碼問題源代碼[未登錄] 2015-07-18 14:19 123

@cai ji
你逗呀,特么的都說了可以用c/c++。。。  回復(fù)  更多評(píng)論   

# re: ACRUSH(樓天成)八數(shù)碼問題源代碼 2015-10-20 16:54 dgsdg 1

gadrgadfg  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品成人av性教育| 亚洲在线国产日韩欧美| 亚洲欧洲综合| 亚洲一区综合| 亚洲深爱激情| 国产精品美女www爽爽爽| 影音先锋久久| 欧美大片一区| 国产精品一香蕉国产线看观看| 国产精品久久久久久久久久尿 | 久久综合一区二区| 久久精品国产清自在天天线| 久久久久国色av免费看影院| 免费美女久久99| 欧美日在线观看| 亚洲人成网站777色婷婷| 久久久免费av| 亚洲第一伊人| 精久久久久久| 亚洲午夜av| 亚洲欧美日韩在线高清直播| 欧美成在线观看| 免费日韩av片| 国产精品一区视频网站| 亚洲成色最大综合在线| 99国产精品久久久久老师| 国产一区91精品张津瑜| 久久九九国产精品| 久久久久久一区二区三区| 欧美一二区视频| 亚洲国产美国国产综合一区二区| 久久se精品一区精品二区| 9色精品在线| 99国产麻豆精品| 一区二区三区在线免费播放| 欧美久久一区| 国产精品高清在线| 美日韩精品视频| 亚洲视频在线观看| 亚洲人成网站999久久久综合| 久久久青草青青国产亚洲免观| 亚洲一区二区三区免费观看 | 亚洲激情校园春色| 亚洲综合国产激情另类一区| 亚洲激情网址| 欧美四级在线观看| 日韩视频永久免费观看| 亚洲愉拍自拍另类高清精品| 一区二区三区四区五区视频| 亚洲激情欧美| 亚洲男人的天堂在线| 亚洲色图在线视频| 久久久无码精品亚洲日韩按摩| 制服诱惑一区二区| 国产精品美女999| 亚洲日韩欧美视频| 亚洲经典在线看| 久久久国产一区二区| 亚洲高清视频一区| 亚洲在线1234| 欧美国产日韩精品免费观看| 亚洲欧洲在线一区| 久久国产天堂福利天堂| 麻豆精品视频在线观看| 一本色道久久综合亚洲精品婷婷| 亚洲专区免费| 国语精品中文字幕| 亚洲激情视频网站| 亚洲视频每日更新| 亚洲女人av| 女人天堂亚洲aⅴ在线观看| 欧美—级在线免费片| 日韩视频一区| 久久一区视频| 亚洲综合久久久久| 欧美一区精品| 亚洲午夜伦理| 国产欧美一区二区三区久久人妖 | 久久久福利视频| 国内精品伊人久久久久av影院 | 99re66热这里只有精品3直播| 久久久久综合一区二区三区| 欧美日韩hd| 亚洲永久精品国产| 国产在线精品自拍| 在线一区免费观看| 欧美日韩成人在线| 亚洲人成在线播放网站岛国| 欧美性生交xxxxx久久久| 日韩午夜免费视频| 久久久精品五月天| 一区二区三区四区国产| 新狼窝色av性久久久久久| 国产日韩精品在线观看| 日韩一区二区免费看| 国产一区二区激情| 一个色综合导航| 在线观看亚洲视频| 在线亚洲精品| 亚洲国产精品欧美一二99| 一区二区日韩| 亚洲成色777777在线观看影院| 亚洲一区二区成人在线观看| 亚洲精品国产系列| 久久久久久电影| 亚洲一区二区三区涩| 男人的天堂亚洲| 国产精品久久国产愉拍| 狂野欧美激情性xxxx欧美| 国产字幕视频一区二区| 亚洲欧美国产精品专区久久| 欧美大香线蕉线伊人久久国产精品| 国产久一道中文一区| 一区二区三区av| 噜噜噜久久亚洲精品国产品小说| 欧美一区二区三区精品| 欧美日韩国产探花| 夜夜狂射影院欧美极品| 亚洲黄色成人| 国产精品国产成人国产三级| 中文亚洲免费| 亚洲二区在线视频| 91久久夜色精品国产九色| 欧美午夜不卡在线观看免费| 久久综合国产精品| 亚洲一区三区电影在线观看| 久久精品国产亚洲aⅴ| 亚洲第一福利在线观看| 欧美激情精品久久久六区热门| 亚洲国产欧美一区二区三区丁香婷| 久久综合狠狠综合久久激情| 欧美激情二区三区| 亚洲精品久久久久久久久| 国产一区二区丝袜高跟鞋图片| 中文av字幕一区| 美女日韩欧美| 亚洲第一色中文字幕| 亚洲精品五月天| 亚洲国产精品成人综合| 亚洲欧美视频一区| 亚洲精品视频啊美女在线直播| 欧美日韩精品中文字幕| 欧美激情一区三区| 久久偷窥视频| 久久综合久久美利坚合众国| 午夜精品成人在线视频| 国外成人在线视频网站| 在线看无码的免费网站| 夜夜爽av福利精品导航| 亚欧成人在线| 亚洲特黄一级片| 欧美日韩亚洲一区| 欧美亚州韩日在线看免费版国语版| 欧美亚洲免费在线| 国产精品国产三级国产aⅴ入口| 免费日韩av片| 欧美日韩1区2区3区| 老牛嫩草一区二区三区日本| 久久亚洲综合色一区二区三区| 久久久久久久999精品视频| 久久香蕉国产线看观看av| 狼狼综合久久久久综合网| 久久精品卡一| 久久狠狠亚洲综合| 欧美国产日产韩国视频| 国产美女精品人人做人人爽| 亚洲日产国产精品| 久久综合国产精品| 久久久99精品免费观看不卡| 欧美亚一区二区| 一区二区三区四区在线| 一区二区三区四区五区精品视频| 欧美母乳在线| 亚洲一本视频| 久久久99免费视频| 欧美成人资源| 一区二区免费看| 日韩小视频在线观看专区| 一区二区91| 亚洲欧美国产精品桃花| 欧美福利一区| 国产精品久久久久免费a∨大胸| 国产欧美另类| 日韩亚洲成人av在线| 久久精品国产成人| 欧美在现视频| 亚洲国产精品www| 狼狼综合久久久久综合网| 香蕉av福利精品导航| 欧美激情一区二区三级高清视频| 亚洲免费影院| 亚洲国产精品va在线观看黑人| 免费在线成人| 欧美日韩视频在线一区二区观看视频| 亚洲日韩第九十九页| 亚洲黄色一区| 亚洲精品视频在线看| 久久久水蜜桃| 亚洲一区国产| 男人的天堂成人在线|