题目大意:         给你一杯体积为S的满的牛奶,然后有两个容量之和为S的杯子,求倒最小的次数将这杯牛奶平分。 解题思路:         直接用bfs暴力模拟吧,广搜好写,这道题目比较适合广搜,深搜搞了好久还是没有搞出来,等下把它弄出来。 代码:
#include
#include
using namespace std;
const MAX=105;
struct pp
{
	int x;
	int y;
	int z;
	int step;
};

int visited[MAX][MAX][MAX];
pp pre,cur;
int a,b,c;

int bfs()
{
	queue Q;
	visited[c][0][0]=1;
	
	pre.x=c;
	pre.y=0;
	pre.z=0;
	pre.step=0;
	
	Q.push(pre);
	int half=c/2;
	//	cout<=a)
				{
                    cur.x=cur.x+cur.y-a;
                    cur.y=a;
                    if(!visited[cur.x][cur.y][cur.z])
					{
                        Q.push(cur);
						visited[cur.x][cur.y][cur.z]=1;
                    }
                }
                else 
				{
                    cur.y=cur.x+cur.y;
                    cur.x=0;
                    if(!visited[cur.x][cur.y][cur.z])
					{
                        Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
                    }
                }
            }
            if(pre.z=b)
				{
                    cur.x=cur.x+cur.z-b;
                    cur.z=b;
                    if(!visited[cur.x][cur.y][cur.z])
					{
                        Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
                    }
                }
                else
				{
                    cur.z=cur.x+cur.z;
                    cur.x=0;
                    if(!visited[cur.x][cur.y][cur.z])
					{
                        Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
                    }
                }
            }
        }
        if(pre.y)//对a瓶
		{
            cur=pre;//把a倒入c
            cur.x=cur.x+cur.y;
            cur.y=0;
            if(!visited[cur.x][cur.y][cur.z])
			{
                Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
            }
            if(pre.z=b)//把a倒入b
				{
                    cur.y=cur.y+cur.z-b;
                    cur.z=b;
                    if(!visited[cur.x][cur.y][cur.z])
					{
                        Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
                    }
                }
                else
				{
                    cur.z=cur.y+cur.z;
                    cur.y=0;
                    if(!visited[cur.x][cur.y][cur.z])
					{
                        Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
                    }
                }
            }
        }
        if(pre.z)//对b瓶
		{
			//把b倒回c
            cur=pre;
            cur.x=cur.x+cur.z;
            cur.z=0;
            if(!visited[cur.x][cur.y][cur.z])
			{
                Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
            }
            if(pre.y=a)//把b倒入a
				{
                    cur.z=cur.y+cur.z-a;
                    cur.y=a;
                    if(!visited[cur.x][cur.y][cur.z])
					{
                        Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
                    }
                }
                else
				{
                    cur.y=cur.y+cur.z;
                    cur.z=0;
                    if(!visited[cur.x][cur.y][cur.z])
					{
                        Q.push(cur);visited[cur.x][cur.y][cur.z]=1;
                    }
                }
            }
        }
		
	}
	return 0;
}
void init()
{
	for(int i=0;i>c>>a>>b,a||b||c)
	{
		int ans;
		init();
		if(c%2)
		{
			cout<<"NO"<
posted on 2011-11-30 22:32  cchun  阅读(194)  评论(0编辑  收藏  举报