最終狀態表示的數值
const
int dx=;
const
int dy=;
int ans = 0
;int hash[65535+100
];void print(int a[5][5
]);unsigned
int num(int a[5][5
]);void copy(int b[5][5],int a[5][5
]);void num_change(unsigned int x,int a[5][5
]);struct
node
intlevel;
unsigned
intx;
};int main(void
) hash[x]=1
; queue
que;
node p = node(0
,x);
que.push(p);
while(!que.empty())
int b[5][5],next_level = temp.level+1
;
//cout << next_level << endl;
num_change(temp.x,b);
for(int i=1;i<=4;i++)}}
}} }}
cout
<
return0;
}void print(int a[5][5
]) cout
<
}}unsigned
int num(int a[5][5
]) }
return
sum;
}void copy(int b[5][5],int a[5][5
])void num_change(unsigned int x,int a[5][5
]) } }
這是乙個通用的方法,還可以使用貪心演算法:
可以先將每一列的0全部移動到這一列的上方,然後如果白色的棋子沒有剛好形成兩行,那麼就依次 將移動之後 最下方的白色棋子移動到黑色棋子最高的地方。
#include#include#include
using
namespace
std;
int ans[5][5
];int main(void)
} int step = 0
;
for(int j=1;j<=4;j++)
}if(sum0==1) step+=pos-1,ans[2][j]=ans[3][j]=ans[4][j]=1
;
if(sum0==2) step+=pos-1-2,ans[3][j]=ans[4][j]=1
;
if(sum0==3) step+=pos-1-2-3,ans[4][j]=1
;
if(sum0==4) step+=pos-1-2-3-4
; }
bool find = true
;
while
(find)
}if(find) break
; }
bool first=false
;
if(find)
}if(first) break
; }
step+=abs(x1-x2)+abs(y1-y2);
ans[x1][y1]=1
; ans[x2][y2]=0
; }
}cout
<
return0;
}
Krito的討伐(bfs加上優先佇列
krito終於乾掉了99層的boss,來到了第100層。第100層可以表示成一顆樹,這棵樹有n個節點 編號從0到n 1 樹上每乙個節點可能有很多只怪物。krito現在在0號節點,現在它想要區清除這一層所有的怪物。他現在有atk大小的攻擊力。只有當你的攻擊力大於這只怪物的防禦力時,你才可以打敗他,同時...
廣度搜尋bfs
廣度搜尋在acm中應用十分廣泛,英文簡寫是bfs breadth first search 下面先看一下例子 在乙個4 4的矩形中,有一些位置設定有障礙,要求從 1,1 走到 4,4 求最短距離。分析 假設沒有任何障礙,我們可以走的路線如下 起點為 1,1 假設這一步是第一步可以到達的位置 然後它可...
寬度優先搜尋BFS
寬度優先搜尋 bfs,breadth first search 也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。與深度優先搜尋的不同之處在於搜尋的順序,寬度優先搜尋總是先搜尋距離初始狀態近的狀態。也就是說,它是按照開始狀態 只需1次轉移就可以到達的所有狀態 只需2次轉...