思路:bfs需要輸出路徑,不能用c++的queue,因為回溯的過程要用到佇列的下標,所以我們需要模擬佇列
#include#include#include#includeusing namespace std;
const int maxn = 1e5+10;
int n,m,k;
int vis[110][110];
struct node
q[1100]; //模擬佇列
int ans[1100]; // 記錄回溯過程
void bfs()
else if(q[ans[i]].pos==2)
else if(q[ans[i]].pos==3)
else if(q[ans[i]].pos==4)
else if(q[ans[i]].pos==5)
else if(q[ans[i]].pos==6)
}return;
}for(int i=0; i<6; i++) //倒水操作
else if(i==1)
else if(i==2)
else if(i==3)
else if(i==4)
else
after.pre = head;
after.pos = 5;
}else if(i==5)
else
after.pre = head;
after.pos = 6;
}if(!vis[after.a][after.b])
}head++;
}cout<<"impossible"<>n>>m>>k;
memset(vis,0,sizeof(vis));
bfs();
return 0;
}
poj 3414 倒水問題 bfs
思路 就是bfs,有六種操作,fill 1或2,drop 1或2 將1倒到2,將2倒到1。要注意的是要使用標記陣列vis i j 表示左邊的杯子為i公升,右邊的杯子為j公升,如果已被標記說明之前已經出現這種情況,就不要入隊。從 0,0 開始bfs。因為題目中需要輸出如何倒,那麼就需要儲存路徑。以前似...
poj3414 bfs 路徑列印
題目大意 給出2個水杯和目標的容量,輸出經過fill drop pour三種操作的最少步數。這題思路還是比較清晰的,可是就是不知為什麼mle了,找不出來問題,先碼著放這裡,有空回來看。mle include include include include include include includ...
POJ 3414(BFS 輸出路徑 倒水問題)
題意 給你兩個容器,分別能裝下a公升水和b公升水,並且可以進行以下操作 fill i 將第i個容器從水龍頭裡裝滿 1 i 2 drop i 將第i個容器抽乾 pour i,j 將第i個容器裡的水倒入第j個容器 這次操作結束後產生兩種結果,一是第j個容器倒滿並且第i個容器依舊有剩餘,二是第i個容器裡的...