題意:給你兩個水杯的容積和乙個數m,讓你在任意乙個水杯中倒出乙個m,求最小步數,和輸出路徑。六種操作。
題解:bfs六種操作。然後記錄路徑。用dfs反向查詢路徑。博主的方法比較笨,手寫了乙個佇列,然後記錄當前步是由佇列中那一步到達的。具體看**實現。
#include#include#includeusing namespace std;
struct node que[100000];
int book[105][105]; // 標記陣列
int head,tail; //隊頭和隊尾
int result[100000]; // 結果陣列。
int ans = 0; // 結果陣列的下標
void print(int s)
else
}int a,b,c;
void bfs()
else if(result[i] == 2)
else if(result[i] == 3)
else if(result[i] == 4)
else if(result[i] == 5)
else if(result[i] == 6)
}if(now.prezt == 1)
else if(now.prezt == 2)
else if(now.prezt == 3)
else if(now.prezt == 4)
else if(now.prezt == 5)
else if(now.prezt == 6)
return ;
} for(int i = 1 ; i <= 6 ; i++)
}else if(i == 2)
}else if(i == 3)
else if(sum >b)
next.step = now.step + 1;
next.pre = aa;
next.prezt = 3;
if(book[next.x][next.y] == 0)
}else if(i == 4)
}else if(i == 5)
}else if(i == 6)
else
next.step = now.step + 1;
next.pre = aa;
next.prezt = 6;
if(book[next.x][next.y] == 0)
}} }
printf("impossible\n");
return ;
}int main()
return 0;
}
poj 3414 pots(bfs暴力 路徑記錄)
思路 這可真是我目前寫過最長的題目了,雖然很多可以複製 學藝不精t t 其實思路還是很簡單的,就是6種情況,各種倒來倒去,然後記錄下路徑,我的方法是用一張圖來表示,有沒有走到過,然後圖上每個位置都存著父節點的位置,以及父節點怎麼達到,如果找到了逆序輸出,如果沒找到impossible,具體的看 吧 ...
POJ 3414 Pots BFS記錄最短路徑
poj3414 給出了兩個瓶子1號和2號的容量分別為a和b,以及乙個目標水量c,對兩個瓶子有如下操作 fill i 把i號瓶子裝滿 drop i 把i號瓶子倒光 pour i,j 把i號瓶子的水倒入j號瓶子,直到i號瓶子水倒光或者j號瓶子被倒滿 問至少經過幾次操作使任一瓶子的水量為c,並記錄任一條最...
poj解題報告 3414
題目大意 有二個水壺,對水壺有三種操作,1 fill i 將i水壺的水填滿,2 drop i 將水壺i中的水全部倒掉,3 pour i,j 將水壺i中的水倒到水壺j中,若水壺 j 滿了,則 i 剩下的就不倒了,問進行多少步操作,並且怎麼操作,輸出操作的步驟,兩個水壺中的水可以達到c這個水量。如果不可...