• NYOJ-21 三个水杯 AC 分类: NYOJ 2014-02-08 11:35 174人阅读 评论(0) 收藏



    人生中第一个AC的广搜题目,喵呜,C++的STL果真不错,


    #include<stdio.h>
    #include<queue>
    #include<string.h> 
    #include<windows.h>
    using namespace std;
    bool visited[100][100][100];  
    int a, b, c;
    struct Node{
    	int a;
    	int b;
    	int c;
    	int s;
    };
    	Node water;
    	Node cup;
    	Node fish;
    	Node dream;
    Node gb(Node key, int n){
    	switch(n){
    		case 0:
    			key.b+=key.a;
    			if(key.b>water.b){
    				key.a=key.b-water.b;
    				key.b=water.b;
    			}
    			else{
    				key.a = 0;
    			}
    			break;
    		case 1:
    			key.c+=key.a;
    			if(key.c>water.c){
    				key.a=key.c-water.c;
    				key.c=water.c;
    			}
    			else{
    				key.a = 0;
    			}
    			break;
    		case 2:
    			key.c+=key.b;
    			if(key.c>water.c){
    				key.b=key.c-water.c;
    				key.c=water.c;
    			}
    			else{
    				key.b = 0;
    			}
    			break;
    		case 3:
    			key.a+=key.c;
    			if(key.a>water.a){
    				key.c=key.a-water.a;
    				key.a=water.a;
    			}
    			else {
    				key.c = 0;
    			}
    			break;
    		case 4:
    			key.a+=key.b;
    			if(key.a>water.a){
    				key.b=key.a-water.a;
    				key.a=water.a;
    			}
    			else{
    				key.b = 0;
    			}
    			break;
    		case 5:
    			key.b+=key.c;
    			if(key.b>water.b){
    				key.c=key.b-water.b;
    				key.b=water.b;
    			}
    			else{
    				key.c = 0;
    			}
    			break;
    	}
    	return key;
    }
    int main(){
    	int i, sum, n;
    	scanf("%d",&n);
    	while(n--){
    	
    	queue<Node>num;
    	
    	scanf("%d%d%d",&water.a,&water.b,&water.c);
    	scanf("%d%d%d",&fish.a,&fish.b,&fish.c);
    	memset(visited, false, sizeof(visited));  
    	cup.a = water.a;
    	cup.b=0;
    	cup.c=0;
    	cup.s=0;
    	visited[cup.a][0][0] = true;
    	num.push(cup);
    		while(!num.empty()){
    			cup=num.front();
    			if((cup.a==fish.a)&&(cup.b==fish.b))	break;
    			for(i=0;i<6;i++){
    				dream=gb(cup,i);
    				dream.s++;
    				if(visited[dream.a][dream.b][dream.c] == false){
    					num.push(dream); 
    					visited[dream.a][dream.b][dream.c] = true;
    				}
    			}
    			num.pop();
    		}
    		if(num.empty()){
    			printf("-1
    ");
    		}else{
    			printf("%d
    ",cup.s);
    		}
    		}
    	return 0;
    } 

    若是对广搜的概念还是不懂的话,有道最好的入门题目,http://poj.org/problem?id=3278

    大家加油

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    汇编 gdb调试
    汇编 运行错误解决办法
    binutils安装
    汇编错误
    汇编
    pthread_create()
    error2019-01-17 宏STDOUT_FILENO
    2019-01-17 跳至首行
    .NET MVC 两种视图引擎(Razor、Aspx)
    ECharts属性设置
  • 原文地址:https://www.cnblogs.com/you-well-day-fine/p/4671662.html
Copyright © 2020-2023  润新知