題意:
給你兩個容器,分別能裝下a公升水和b公升水,並且可以進行以下操作
fill(i) 將第i個容器從水龍頭裡裝滿(1 ≤ i ≤ 2);
drop(i) 將第i個容器抽乾
pour(i,j) 將第i個容器裡的水倒入第j個容器(這次操作結束後產生兩種結果,一是第j個容器倒滿並且第i個容器依舊有剩餘,二是第i個容器裡的水全部倒入j中,第i個容器為空)
現在要求你寫乙個程式,來找出能使其中任何乙個容器裡的水恰好有c公升,找出最少運算元並給出操作過程
思路:bfs。
我的**不知道為什麼wa,實在找不出錯,,只能先學習一下巨巨的寫法……
我的:
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int maxn=200005;
const double eps=1e-8;
const double pi = acos(-1.0);
struct node
;int a,b,c,vis[110][110];
void bfs()
else
break;
case 6:
if(t.b<=a-t.a)
else
break;
}if(!vis[s.a][s.b])
ac**:
#include #include using namespace std;
#include #include #include struct cup
;queueq;
stackr;
int a, b, e;
int vis[117][117]=;//標記當前狀態是否到達過
int ans;
void bfs(int x, int y)
else
c.flag = 5;
break;
case 6: //pour b to a
if(t[count].y > a-t[count].x)
else
c.flag = 6;
break;
}if(vis[c.x][c.y])
continue;
vis[c.x][c.y] = 1;
c.step = t[count].step+1;
c.pre = &t[count];
if(c.x == e || c.y == e)
return;
}q.push(c);
} }}void print()
return 0;
}
poj3414 bfs 路徑列印
題目大意 給出2個水杯和目標的容量,輸出經過fill drop pour三種操作的最少步數。這題思路還是比較清晰的,可是就是不知為什麼mle了,找不出來問題,先碼著放這裡,有空回來看。mle include include include include include include includ...
Pots POJ 3414(bfs 路徑輸出)
思路 bfs需要輸出路徑,不能用c 的queue,因為回溯的過程要用到佇列的下標,所以我們需要模擬佇列 include include include includeusing namespace std const int maxn 1e5 10 int n,m,k int vis 110 110...
POJ3984 迷宮問題 簡單BFS 輸出路徑
迷宮問題 題意 在乙個5 5的迷宮中,數字0表示為可通過的路,數字1表示為不可通過的牆。問從左上角走到右下角的最短路線,並且輸出路徑。題目保證只有一組解,所以不用考慮字典序啥的 題解 據說,題目真的只有一組解,你只要複製樣例中的輸出然後提交就能過。雖然但是,還是要正兒八經做題的,輸出路徑最近常幹了,...