*Step.4 算法 ACM广度优先搜索(BFS) 非常可乐【倒水问题+BFS】

http://acm.hdu.edu.cn/showproblem.php?pid=1495

个人意见,值得一看。

思路,总共6种倒水方式,把每种都倒一遍就行了,符合bfs。注意对已经倒过的情况保存记录,防止重复倒入。

#include
#include
#include
using namespace std;
int mm,nn,ss;
bool vis[105][105];
struct Node{
	int m,n,s,t=0;
}; 
void msort(){
	if(mm>nn){
		int t=mm;
		mm=nn;
		nn=t;
	}
	if(nn>ss){
		int t=nn;
		nn=ss;
		ss=t;
	}

}
int main(){
	while(cin>>ss>>nn>>mm&&ss!=0){
		memset(vis,0,sizeof(vis));
		msort();		
		if(ss%2==1){
			cout<<"NO"<q;
		q.push(n);
		bool flag=false;
		while(!q.empty()){
			Node node=q.front();
			q.pop();
			if(node.m==0&&node.n==node.s){
				flag=true;
				cout<n m->s  n->m n->s  s->m s->n
			//倒水的原则: 看目标是不是满了,不满就倒
			//倒水的结果,将倒水的容器的水全倒进去,
			//如果目标的水大于容量, 倒水的容器为 差值
			//否则,为零 
			
			//1	m->n
			if(node.ns
			if(node.sm
			if(node.ms
			if(node.sm			
			if(node.mn			
			if(node.n

 

 

 

 

你可能感兴趣的:(ccf第二遍刷题,ccf刷题2.0)