Java實現 藍橋杯 演算法提高 八數碼(BFS)
Java實現 藍橋杯 演算法提高 八數碼(BFS)
試題 演算法提高 八數碼
問題描述
RXY八數碼
輸入格式
輸入兩個33表格
第一個為目標表格
第二個為檢索表格
輸出格式
輸出步數
樣例輸入
1 2 3
4 5 6
7 8 0
1 2 3
4 5 6
7 0 8
樣例輸出
1
資料規模和約定
33*2
PS:
花裡胡哨得,直接套程式碼搜
import java.util.*;
public class Main {
static int[]dx = {0,0,1,-1};
static int[]dy = {1,-1,0,0};
static int[][]st = new int[3][3];
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int [][]st1 = new int[3][3];
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
st1[i][j]=scan.nextInt();
}
}
for(int i=0;i<3;++i){
function(){ //外匯分析師:
for(int j=0;j<3;++j){
st[i][j]=scan.nextInt();
}
}
System.out.println(bfs(st1));
}
public static int[][] swap(int[][]st1,int i,int j,int sx,int sy){
int[][]st2 = new int[3][3];
for(int w=0;w<3;++w){
for(int e=0;e<3;++e){
st2[w][e]=st1[w][e];
}
}
int x = st2[i][j];
st2[i][j]=st1[sx][sy];
st2[sx][sy]=x;
return st2;
}
public static int bfs(int[][]st1){
Queue<int[][]> q = new LinkedList<>();
HashMap<int[][],Integer> m = new HashMap<>();
q.offer(st1);
m.put(st1, 0);
while(!q.isEmpty()){
int[][]st2 = q.poll();
boolean b1 = true;
for(int w=0;w<3;++w){
for(int e=0;e<3;++e){
if(st2[w][e]!=st[w][e]){
b1=false;
}
}
}
if(b1){
return m.get(st2);
}
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
if(st2[i][j]==0){
for(int k=0;k<4;++k){
int sx = i+dx[k];
int sy = j+dy[k];
if(sx<0||sx>=3||sy<0||sy>=3){
continue;
}
int[][]st3=swap(st2,i,j,sx,sy);
if(!m.containsKey(st3)){
q.offer(st3);
m.put(st3, m.get(st2)+1);
}
}
}
}
}
}
return -1;
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2689482/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- 藍橋杯-長草(BFS)
- [藍橋杯][演算法提高VIP]大數加法演算法
- 藍橋杯-走迷宮(BFS)
- 藍橋杯-迷宮(BFS+DFS)
- 藍橋杯 演算法提高 字串壓縮演算法字串
- 藍橋杯 (java)演算法訓練 數對Java演算法
- 藍橋杯 -- 演算法提高 身份證號碼升級演算法
- [藍橋杯][演算法提高VIP]尤拉函式演算法函式
- [藍橋杯][演算法提高VIP]超級瑪麗演算法
- [Java] 藍橋杯ADV-185 演算法提高 五次方數Java演算法
- [藍橋杯][演算法提高VIP]奪寶奇兵 dp演算法
- [Java] 藍橋杯ADV-203 演算法提高 8皇后·改Java演算法
- 藍橋杯 演算法提高 P0102(Java解題)演算法Java
- 藍橋杯之特殊迴文數JAVAJava
- 藍橋杯-演算法提高 學霸的迷宮(BFS-倒向追蹤輸出移動方向)演算法
- 藍橋杯 演算法訓練 K好數(Java解題)演算法Java
- [藍橋杯][演算法提高VIP]分蘋果 線段樹演算法蘋果
- 藍橋杯 演算法提高 拿糖果(完全揹包dp)演算法
- 藍橋杯-帶分數
- [Java] 藍橋杯ADV-213 演算法提高 3-2求存款Java演算法
- 閒聊藍橋杯JAVA - 生成迴文數Java
- 2016藍橋杯演算法提高——身份證號碼升級演算法
- [Java] 藍橋杯ALGO-117 演算法訓練 友好數JavaGo演算法
- [Java] 藍橋杯ADV-147 演算法提高 學霸的迷宮Java演算法
- 藍橋杯—演算法訓練演算法
- 藍橋杯--演算法訓練演算法
- 藍橋杯-波動數列
- 藍橋杯-合併數列
- [藍橋杯][演算法訓練VIP]方格取數演算法
- 題目 1501: [藍橋杯][演算法提高VIP]分蘋果演算法蘋果
- [Java] 藍橋杯ADV-194 演算法提高 盾神與積木遊戲Java演算法遊戲
- [Java] 藍橋杯ADV-202 演算法提高 最長公共子序列Java演算法
- [Java] 藍橋杯ADV-209 演算法提高 c++_ch02_04Java演算法C++
- [Java] 藍橋杯ADV-210 演算法提高 2-1螢幕列印Java演算法
- 密碼脫落——藍橋杯密碼
- 藍橋杯-M次方根(實數二分)
- 藍橋杯-買不到的數目