Pots POJ 3414(bfs 路徑輸出)

2021-09-26 11:02:51 字數 918 閱讀 2663

思路: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個容器裡的...