藍橋杯 歷屆試題 九宮重排

問題描述
如下面第一個圖的九宮格中,放著 1~8 的數字卡片,還有一個格子空著。與空格子相鄰的格子中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。

  我們把第一個圖的局面記為:12345678.
  把第二個圖的局面記為:123.46758
  顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。
  本題目的任務是已知九宮的初態和終態,求最少經過多少步的移動可以到達。如果無論多少步都無法到達,則輸出-1。
輸入格式
輸入第一行包含九宮的初態,第二行包含九宮的終態。
輸出格式
輸出最少的步數,如果不存在方案,則輸出-1。
樣例輸入
12345678.
123.46758
樣例輸出
3
樣例輸入
13524678.
46758123.
樣例輸出
22
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<vector>
 6 #include<queue>
 7 #include<set> 
 8 #define N 20005
 9 using namespace std;
10 
11 char mp[3][3], gp[3][3];
12 int dir[4][2] = {0,1, 1,0, -1,0, 0,-1};
13 char str[10];
14 struct node{
15     int x, y;
16     int step;
17     char cur_mp[3][3];//記錄當前圖案
18     node(){
19     }
20     node(int x, int y, int step){
21         this->x = x;
22         this->y = y;
23         this->step = step;
24     }
25 };
26 set<int>st;
27 queue<node>q;
28 bool check(node cur){
29     for(int i=0; i<3; ++i)
30         for(int j=0; j<3; ++j)
31             if(cur.cur_mp[i][j] != gp[i][j])
32                 return false;
33     return true;
34 }
35 
36 int cal(node cur){//每一次移動將會映射到一個不同的整數
37     int ss = 0;
38     for(int i=0; i<3; ++i)
39         for(int j=0; j<3; ++j)
40             if(cur.cur_mp[i][j] != '.')
41                 ss = ss*10+(cur.cur_mp[i][j]-'0');
42             else ss = ss*10+9;
43     return ss;
44 }
45 
46 void bfs(){
47     st.clear();
48     if(!q.empty())
49         st.insert(cal(q.front()));
50     while(!q.empty()){
51         node cur = q.front();
52         q.pop();
53         if(check(cur)) {
54             cout<<cur.step<<endl;
55             return ;
56         }
57         
58         for(int i=0; i<4; ++i){
59             int xx = cur.x+dir[i][1];
60             int yy = cur.y+dir[i][0];
61             if(xx<0 || xx>2 || yy<0 || yy>2) continue;
62             node nt = node(xx, yy, cur.step+1);
63             memcpy(nt.cur_mp, cur.cur_mp, sizeof(cur.cur_mp));
64             nt.cur_mp[cur.x][cur.y]^=nt.cur_mp[xx][yy];
65             nt.cur_mp[xx][yy]^=nt.cur_mp[cur.x][cur.y];
66             nt.cur_mp[cur.x][cur.y]^=nt.cur_mp[xx][yy];
67             int val = cal(nt);
68             if(st.find(val) != st.end()) continue;
69             st.insert(val);
70             q.push(nt);
71         }
72     }
73     cout<<-1<<endl;
74 }
75 
76 int main() {
77     while(cin>>str){
78         int bx, by;
79         while(!q.empty()) q.pop();
80         int len = 0;
81         for(int i=0; i<3; ++i)
82             for(int j=0; j<3; ++j){
83                 mp[i][j] = str[len++];
84                 if(mp[i][j] == '.') bx=i, by=j;
85             }
86         node cur = node(bx, by, 0);
87         memcpy(cur.cur_mp, mp, sizeof(mp));
88         q.push(cur);
89         cin>>str;
90         len = 0;
91         for(int i=0; i<3; ++i)
92             for(int j=0; j<3; ++j)
93                 gp[i][j] = str[len++];
94         bfs();
95     }
96     return 0;
97 }

?

轉載于:https://www.cnblogs.com/hujunzheng/p/4345489.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531526.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531526.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛擬云服務器有哪些,虛擬云主機和服務器有什么區別

虛擬云主機和服務器有什么區別&#xff1f;不管是放網站程序&#xff0c;還是數據庫&#xff0c;或者是各種軟件等&#xff0c;都需要先選擇一個適合的空間去儲存這些信息。現在&#xff0c;選擇云主機和獨立服務器的客戶都比較多&#xff0c;兩者有什么使用區別呢。虛擬云主機…

java坦克大戰源碼下載

HJZGG: https://github.com/hjzgg/hjzgg_tank_java 解壓之后運行可執行jar包即可&#xff01;效果圖如下&#xff1a; v 1.游戲開始v 2.選擇地圖v 3.開始游戲v 4.游戲自定義轉載于:https://www.cnblogs.com/hujunzheng/p/4348415.html

虛擬化服務器的管理與維,服務器虛擬化管理

服務器虛擬化管理 內容精選換一換為了解決Windows系統的源端服務器與目的端彈性云服務器的兼容性問題&#xff0c;您需要手動給目的端服務器安裝相關驅動進行優化。登錄管理控制臺。選擇“計算 > 彈性云服務器”。在彈性云服務器列表中&#xff0c;查看目的端服務器的規格。…

HDU 1007Quoit Design(最近點問題)

最近點問題&#xff1a;二維平面中有n&#xff08;n很大&#xff09;個點&#xff0c;求出距離最近的兩個點思路&#xff1a;因為n的值很大&#xff0c;所以暴力和dp都行不通了吧&#xff01;分治法就挺好的。將區間一半一半的分開&#xff0c;直到分成只有一個點或兩個點的時候…

網頁信息上傳服務器,Unity 連接網頁服務器 獲取數據上傳數據

usingLitJson;usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Net;usingSystem.Net.Http;usingSystem.Text;usingUnityEngine;usingUnityEngine.Networking;usingUnityEngine.UI;//請求連接//數據類型public classConserver…

Myeclipse 操作數據庫

步驟1&#xff1a;通過MyEclipse中的window-》show View-》other 調出。DB瀏覽器&#xff0c;和 SQL Results 步驟2. 可以右鍵單擊空白處&#xff0c;選擇new&#xff0c;創建一個新的DB connection&#xff0c; 或者edit已經存在的DB connection 步驟3&#xff1a;數據庫信息填…

媒體服務器協議,媒體服務器介紹(mediactrl架構)

5.1.1MediaCtrl媒體控制草案MediaCtrl是IETF下專門研究和制定媒體服務器控制標準的小組&#xff0c;以SIP和XML為所制定標準的基礎。這個工作組的工作包括&#xff1a;定義媒體服務器控制的技術需求說明、框架、控制協議簇和定位/連接協議。5.1.1.1技術需求描述這個技術需求描述…

藍橋杯 歷屆試題 帶分數

歷屆試題 帶分數 時間限制&#xff1a;1.0s 內存限制&#xff1a;256.0MB問題描述 100 可以表示為帶分數的形式&#xff1a;100 3 69258 / 714。還可以表示為&#xff1a;100 82 3546 / 197。注意特征&#xff1a;帶分數中&#xff0c;數字1~9分別出現且只出現一次&…

藍橋杯 歷屆試題 剪格子

歷屆試題 剪格子 時間限制&#xff1a;1.0s 內存限制&#xff1a;256.0MB問題描述 如下圖所示&#xff0c;3 x 3 的格子中填寫了一些整數。--*---- |10* 1|52| --****-- |20|30* 1| *******-- | 1| 2| 3| ------ 我們沿著圖中的星號線剪開&#xff0c;得到兩個部分&#xf…

藍橋杯 歷屆試題 危險系數

歷屆試題 危險系數 時間限制&#xff1a;1.0s 內存限制&#xff1a;256.0MB問題描述 抗日戰爭時期&#xff0c;冀中平原的地道戰曾發揮重要作用。地道的多個站點間有通道連接&#xff0c;形成了龐大的網絡。但也有隱患&#xff0c;當敵人發現了某個站點后&#xff0c;其它站…

android target unknown and state offline解決辦法

沒有錯&#xff0c;將adb的版本升級一下就好了&#xff01; 下載地址為&#xff1a;http://files.cnblogs.com/files/hujunzheng/adb1.0.32.zip 轉載于:https://www.cnblogs.com/hujunzheng/p/4360436.html

Spring3 整合 Hibernate4實現數據庫操作(1)

Hibernate知識學習&#xff1a;http://justsee.iteye.com/blog/1061576 注意Hibernate4在開發當中的一些改變 &#xff1a;http://snake-hand.iteye.com/blog/1995592 //首先在web.xml中加入OpenSessionInViewFilter過濾器 <filter> <filter-name>openSessionInV…

s2sh框架搭建(輔助工具:MyEclipse)及解決一些遇到的問題

1.新建一個web project 2.首先生成Hibernate Facet 3.Hibernate Facet 安裝步驟 4.然后是spring facet安裝步驟 5.最后是struts facet 的配置 6.最后的整體布局如下所示 7.在服務器上運行&#xff0c;發現如下錯誤&#xff1a; 嚴重: Exception sending context initialized ev…

520愛心表白——C語言入門

520愛心表白——C語言入門 關于愛心表白的代碼&#xff0c;網上有很多非常好看而且可以實現顏色變換和立體&#xff0c;動態等效果的代碼。但是我入門不久&#xff0c;能力有限。520重要的可能還是在心意我覺得&#xff0c;所以自己寫了一個非常簡單毫無技術含量愛心代碼來表達…

MyEclipse在搭建s2sh時 如何 uninstalled facet

在資源管理器中&#xff1a;找到當前【項目的根目錄】&#xff0c;在【.setting】目錄中&#xff0c; 找到【org.eclipse.wst.common.project.facet.core.xml】文件。 用【文本編輯器工具】打開&#xff0c;找到&#xff1a; <installed facet"me.hibernate" vers…

s2sh框架搭建(基于spring aop)

對于spring aop 是如何管理事務的&#xff0c;請看一下&#xff1a;http://bbs.csdn.net/topics/290021423 1.applicationContext.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&q…

codeforces B. Pasha and String(貪心)

題意&#xff1a;給定一個長度為len的字符序列&#xff0c;然后是n個整數&#xff0c;對于每一個整數ai&#xff0c; 將字符序列區間為[ai,len-ai1]進行反轉。求出經過n次反轉之后的序列&#xff01; 1 /*2 思路1&#xff1a;將區間為偶數次的直接去掉&#xff01;對剩下的…

java簡單詞法分析器(源碼下載)

java簡單詞法分析器 : http://files.cnblogs.com/files/hujunzheng/%E7%AE%80%E5%8D%95%E8%AF%8D%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8.zip 轉載于:https://www.cnblogs.com/hujunzheng/p/4383880.html

java 模擬qq源碼

java 模擬qq源碼&#xff1a; http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip 轉載于:https://www.cnblogs.com/hujunzheng/p/4390307.html

藍橋杯 算法提高 日期計算

算法提高 日期計算 時間限制&#xff1a;1.0s 內存限制&#xff1a;256.0MB問題描述已知2011年11月11日是星期五&#xff0c;問YYYY年MM月DD日是星期幾&#xff1f;注意考慮閏年的情況。尤其是逢百年不閏&#xff0c;逢400年閏的情況。 輸入格式輸入只有一行YYYY MM DD 輸出…