首页 > 代码库 > 题目1457:非常可乐(广度优先遍历BFS)
题目1457:非常可乐(广度优先遍历BFS)
题目链接:http://ac.jobdu.com/problem.php?pid=1457
详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus
参考代码:
//// 1457 非常可乐.cpp// Jobdu//// Created by PengFei_Zheng on 22/04/2017.// Copyright © 2017 PengFei_Zheng. All rights reserved.// #include <stdio.h>#include <iostream>#include <algorithm>#include <string.h>#include <cmath>#include <queue>#define MAX_SIZE 101using namespace std; int s, n, m; struct N{ int a; int b; int c; int t;}; queue<N> myQueue;bool visit[MAX_SIZE][MAX_SIZE][MAX_SIZE]; void x2y(int &x,int size_x, int &y,int size_y){ if(size_y - y >= x){ y+=x; x = 0; }else{ x -=(size_y-y); y = size_y; }} int BFS(int s, int n, int m){ while(!myQueue.empty()){ N nowP = myQueue.front(); myQueue.pop(); int a, b, c; a = nowP.a; b = nowP.b; c = nowP.c; x2y(a,s,b,n);// a--->b if(visit[a][b][c]==false){ visit[a][b][c]=true; N tmp; tmp.a = a; tmp.b = b; tmp.c = c; tmp.t = nowP.t+1; if((a==s/2 && b==s/2) || (a==s/2 &&c==s/2) || (b==s/2 && c==s/2) ) return tmp.t; myQueue.push(tmp); } a = nowP.a; b = nowP.b; c = nowP.c; x2y(a,s,c,m);// a--->c if(visit[a][b][c]==false){ visit[a][b][c]=true; N tmp; tmp.a = a; tmp.b = b; tmp.c = c; tmp.t = nowP.t+1; if((a==s/2 && b==s/2) || (a==s/2 &&c==s/2) || (b==s/2 && c==s/2) ) return tmp.t; myQueue.push(tmp); } a = nowP.a; b = nowP.b; c = nowP.c; x2y(b,n,a,s);// b--->a if(visit[a][b][c]==false){ visit[a][b][c]=true; N tmp; tmp.a = a; tmp.b = b; tmp.c = c; tmp.t = nowP.t+1; if((a==s/2 && b==s/2) || (a==s/2 &&c==s/2) || (b==s/2 && c==s/2) ) return tmp.t; myQueue.push(tmp); } a = nowP.a; b = nowP.b; c = nowP.c; x2y(b,n,c,m);// b--->c if(visit[a][b][c]==false){ visit[a][b][c]=true; N tmp; tmp.a = a; tmp.b = b; tmp.c = c; tmp.t = nowP.t+1; if((a==s/2 && b==s/2) || (a==s/2 &&c==s/2) || (b==s/2 && c==s/2) ) return tmp.t; myQueue.push(tmp); } a = nowP.a; b = nowP.b; c = nowP.c; x2y(c,m,a,s);// c--->a if(visit[a][b][c]==false){ visit[a][b][c]=true; N tmp; tmp.a = a; tmp.b = b; tmp.c = c; tmp.t = nowP.t+1; if((a==s/2 && b==s/2) || (a==s/2 &&c==s/2) || (b==s/2 && c==s/2) ) return tmp.t; myQueue.push(tmp); } a = nowP.a; b = nowP.b; c = nowP.c; x2y(c,m,b,n);// c--->b if(visit[a][b][c]==false){ visit[a][b][c]=true; N tmp; tmp.a = a; tmp.b = b; tmp.c = c; tmp.t = nowP.t+1; if((a==s/2 && b==s/2) || (a==s/2 &&c==s/2) || (b==s/2 && c==s/2) ) return tmp.t; myQueue.push(tmp); } } return -1;} int main(){ while(scanf("%d%d%d",&s,&n,&m)!=EOF){ if(s==0) break; if(s%2==1){ printf("NO\n"); continue; } for(int i = 0 ; i <= s ; i++){ for(int j = 0 ; j <= n ; j++){ for(int k = 0 ; k <= m ; k++){ visit[i][j][k]=false; } } } while(!myQueue.empty()) myQueue.pop(); N tmp; tmp.a = s; tmp.b = tmp.c = tmp.t = 0; myQueue.push(tmp); visit[s][0][0]=true; int ans = BFS(s,n,m); ans == -1 ? printf("NO\n") : printf("%d\n",ans); }}/************************************************************** Problem: 1457 User: zpfbuaa Language: C++ Result: Accepted Time:10 ms Memory:2528 kb****************************************************************/
题目1457:非常可乐(广度优先遍历BFS)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。