ACM--三個水杯
三個水杯
時間限制:1000 ms | 記憶體限制:65535 KB 難度:4- 描述
- 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出一個程式,使其輸出使初始狀態到達目標狀態的最少次數。
- 輸入
- 第一行一個整數N(0<N<50)表示N組測試資料
接下來每組測試資料有兩行,第一行給出三個整數V1 V2 V3 (V1>V2>V3 V1<100 V3>0)表示三個水杯的體積。
第二行給出三個整數E1 E2 E3 (體積小於等於相應水杯體積)表示我們需要的最終狀態 - 輸出
- 每行輸出相應測試資料最少的倒水次數。如果達不到目標狀態輸出-1
- 樣例輸入
-
2 6 3 1 4 1 1 9 3 2 7 1 1
- 樣例輸出
-
3 -1
#include<iostream> #include<stdio.h> #include<string.h> #include<queue> using namespace std; struct Node { int a,b,c; int step; Node() { step=0; } }; int Max[3];//剛開始水杯中最大的容量 int Cur[3];//水杯中目前的狀態 int End[3];//最終水杯要到達的狀態 int step; bool b[100][100][100]= {0}; void pourWater(int i, int j)//i往j倒水 { if(Cur[i]==0||Cur[j]==Max[j])//如果i中沒有水或者杯子已經滿了 return; if(Cur[i]>Max[j]-Cur[j])//如果i中水倒不完 { Cur[i]=Cur[i]-(Max[j]-Cur[j]); Cur[j]=Max[j]; } else//如果i中水不夠到 { Cur[j]=Cur[i]+Cur[j]; Cur[i]=0; } } //廣度優先搜尋主要思想: //剛開始的水杯中水的狀態記為node,把node加入到佇列中 //從這個狀態開始,有6中倒水狀態,分別給初始狀態進行倒水, //把符合條件的倒水後的水杯中水的狀態加入到佇列中, //直到找到最後需要的狀態。 void bfs() { queue<Node> q; Node node,cur; step=-1; node.a=Max[0]; node.b=0; node.c=0; q.push(node); b[node.a][node.b][node.c]=1; while(!q.empty()) { node = cur = q.front(); q.pop(); Cur[0]=cur.a; Cur[1]=cur.b; Cur[2]=cur.c; if(Cur[0]==End[0]&&Cur[1]==End[1]&&Cur[2]==End[2]) { step=cur.step; break; } for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { if(i!=j&&Cur[i]!=0&&Cur[j]!=Max[j]) { pourWater(i,j); if(!b[Cur[0]][Cur[1]][Cur[2]]) { b[Cur[0]][Cur[1]][Cur[2]]=true; cur.a=Cur[0],cur.b=Cur[1],cur.c=Cur[2]; cur.step++; q.push(cur); } cur=node; Cur[0]=cur.a; Cur[1]=cur.b; Cur[2]=cur.c; } } } } } int main() { int m; cin >> m; while(m--) { memset(b,0,sizeof(b)); memset(Cur,0,sizeof(Cur)); memset(End,0,sizeof(End)); cin >> Max[0] >> Max[1] >> Max[2]; cin >> End[0] >> End[1] >> End[2]; Cur[0]=Max[0]; bfs(); cout << step << endl; } }
相關推薦
ACM--三個水杯
三個水杯 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出一個程式,使其輸出使初
三個水杯(BFS)
post pos acm class .net 一行 ora sea ref 三個水杯 時間限制:1000 ms | 內存限制:65535 KB 難度:4 描寫敘述給出三個水杯。大小不一,而且僅僅有最大的水杯的水是裝滿的,其余兩
nyoj 21 三個水杯
light spa ems 相互 site define front pan 測試 三個水杯 時間限制:1000 ms | 內存限制:65535 KB 難度:4 描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其余兩個為空杯子。三個水杯之間相互倒水,並且水
三個水杯
時間 並且 ret lin tar arch 輸出 nbsp void 三個水杯 時間限制:1000 ms | 內存限制:65535 KB 難度:4 描述給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其余兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有
NYOJ21.三個水杯-初始態到目標態的最少次數-經典BFS
限制 bsp ref mem pre code time can 大小 題目傳送門:biubiubiu~ 三個水杯 時間限制:1000 ms | 內存限制:65535 KB 難度:4 描述給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其余兩個為空杯子
NYOJ #21 三個水杯(bfs)
描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出一個程式,使其輸出使初始狀態到達目標狀態的最少次數。 輸入 第一行一個整數N(0<N<50)表示N組測試資料接下來每組測試資料有
NYOJ 21 三個水杯(BFS)
題目:http://acm.nyist.net/JudgeOnline/problem.php?pid=21 題意很明確 #include<cstdio> #include<cstring> #include<queue> #in
A - 三個水杯 ~ BFS ~
題目描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出一個程式,使其輸出使初始狀態到達目標狀態的最少次數。 輸入 第一行一個整數N(0<N<50)表示N組測試資料
1117-三個水杯
1117 - 三個水杯 時間限制:1秒 記憶體限制:128兆 題目描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出一個程式,使其輸出使初始狀態到達目標狀態的最少次數。
ACM21 三個水杯-Java
三個水杯 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出一個程式,使其
javascript中不易分清的slice,splice和split三個函數
也會 www d參數 keyword str pac 說明 截取 tab 1.slice(數組) 用法:array.slice(start,end) 解釋:該方法是對數組進行部分截取,並返回一個數組副本;參數start是截取的開始數組索引,end參數等於你要取的最後一個字符
js中addEventListener第三個參數涉及到的事件捕獲與冒泡
等等 觸發 不同 ntb 兩個 冒泡 load 觸摸 dom js中,我們可以給一個dom對象添加監聽事件,函數就是 addEventListener("click",function(){},true); 很容易理解,第一個參數是事件類型,比如點擊(click)、觸摸(t
js字符串三個編碼編碼的區別
跳轉 進行 sca escape com js字符串 傳遞 字符 目的 1、escape():編碼目的為了防止字符串中特殊字符造成運算錯誤,主要在字符串運算中使用; 不進行編碼的69個字符:[email protected]/* */*、_、+、-、.、\。 2
離線安裝docker最新版,記得要以下三個包。
oar btool 最新版 刪除 html root images ges con 如果安裝了以前版本,還要刪除以下這個包。 container-selinux.noarch 2:2.10-2.el7 ============== 離線安裝三個rpm -rw-r--
after、append和appendTo三個函數的區別
after bsp text str rep 區別 實例 用法 tle jq文檔的說明是 1、after函數 定義和用法: after() 方法在被選元素後插入指定的內容。 語法: $(selector).after(content) 實例: <html><
python學習第三個坑
cat 自定義函數 min 類型 一個 默認參數 變長參數 是個 分隔 ##########################python 第三章 ################################這一章呢,主要是文件的操作,還有涉及到函數的一部分. PS:整理
Linux文件的三個時間概念
linux系統保存了這三個時間,分別是Accesstime(訪問時間),Modify time(修改時間)和Change time(狀態時間)。官方文檔給出的解釋: st_atime Time when file datawas last accessed. Changed by
安提瓜三個月獲批入籍
吸引 每年 .cn 歐盟 新加坡 澳門 海水 com 天堂 安提瓜和巴布達臨近美國,是加勒比海的一個島國,其清澈的海水和怡人的環境吸引著無數遊客前來度假。安提瓜護照,投資金額少、審批快、直接入籍、免簽國眾多。安提瓜護照是英聯邦國家護照,不僅免簽申根區、英國等歐盟國家,作為英
消息:SQL Server 2017(vNext)的第三個公開的CTP(社區技術預覽版)發布了
start spn system 看到了 一個 get creat 社區 目前 今天看到了一個新聞,跟大家分享一下,有興趣的可以去嘗試一下。 SQL Server 2017 CTP3於5月23日發布了,詳細版本號是6.7.55.0。 大家可以去安裝試試。在下載頁面,目前是S
給學習Linux系統小白的兩三個建議
性價比 linux 前段時間看過一個針對國內Linux使用情況的調研表,有了不少感慨。現在聽說過linux,會一點linux基本操作的人多如牛毛,然而真正能用linux做一點事情的確少之又少。無論是公司還是學校,辦公基本上都基於win。這也造成了國人不習慣接觸linux的主要原因。看到好多人,學了點基