| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:经典BFS 本人写了半个小时代码 degug一上午 服了 犯了小学生错误 服了In Reply To:经典BFS 本人写了半个小时代码 degug一上午 服了 犯了小学生错误 服了 Posted by:zhangjiansong at 2020-04-19 11:24:09 > #include <iostream>
> #include <queue>
> #include <math.h>
>
> using namespace std;
> int isprime(int m)
> {
> for(int i = 2; i*i <= m; i++)
> if(m % i == 0) return 0;
> return 1;
> }
> void BFS(int n,int k)
> {
> int vis[10005] = {0};
> int step[10005];
> queue <int> q;
> int head,end;
> q.push(n);
> vis[n] = 1;
> step[n] = 0;
> while(!q.empty()){
> head = q.front();
> q.pop();
> for(int i = 0; i < 4; ++i){
> for(int j = 0; j <= 9; ++j){ //一开始本人 写成了 i<9 结果又重写了另一个算法 然后发现我这错了 我擦 傻了
> if(i == 3 && j == 0) continue;
> if(i == 0 ) end = (head/10)*10 + j;
> else if(i == 1 ) end = (head/100)*100+head%10+j*10;
> else if(i == 2 ) end = (head/1000)*1000+head%100+j*10*10;
> else if(i == 3 ) end = head%1000 + j*1000;
> int max = k/1000;
> if(!vis[end] && isprime(end)){ //原本想加end1000<max来剪枝的,然后又debug半天发现不能 服了
> q.push(end);
> vis[end] = 1;
> step[end] = step[head] + 1;
> if(end == k){
> cout << step[end] << endl;
> return;
> }
> }
> }
> }
> }
> cout << "Impossible\n"; //我还忘了有impossible 然后又。 服了服了
> }
> int main()
> {
> int T;cin >> T;
> while(T--){
> int n,k;
> cin >> n >> k;
> if(n == k) cout << 0 << endl;
> else BFS(n,k);
> }
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator