zoukankan      html  css  js  c++  java
  • 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

    大家加油

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

    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    远程连接身份验证错误,又找不到加密Oracle修正
    PHP content-type为"application/json"的post过来的数据$_POST接受不到的问题
    PHP获取Cookie模拟登录
    Nodejs的模块系统以及require的机制
    Makefile 使用总结
    python笔记---需求文件requirements.txt的创建及使用
    Node+Express的跨域访问控制问题:Access-Control-Allow-Origin
    Redis常用命令入门5:有序集合类型
    Redis常用命令入门4:集合类型
    Redis常用命令入门3:列表类型
  • 原文地址:https://www.cnblogs.com/you-well-day-fine/p/4671662.html
Copyright © 2011-2022 走看看