1. 程式人生 > >poj 3414 Pots 廣度優先搜尋

poj 3414 Pots 廣度優先搜尋

Hint

#include<stdio.h>
#include<string.h>
int a,b,p;
struct node
{
    int a,b,step;
} q[1000],t,f;
int s[101][101];
int bfs()
{
    int i;
    int qian=1;
    int hou=0;
    q[0].a=0;
    q[0].b=0;
    q[0].step=0;
    s[0][0]=1;
    while(qian>hou)
    {
        t=q[hou++];
        if(t.a==p||t.b==p)
        {
            printf("%d\n",t.step);
            return 0;
        }
        f.a=a;
        f.b=t.b;
        if(s[f.a][f.b]==0)
        {
            f.step=t.step+1;
            q[qian++]=f;
            s[f.a][f.b]=1;
        }
        f.a=t.a;
        f.b=b;
        if(s[f.a][f.b]==0)
        {
            f.step=t.step+1;
            q[qian++]=f;
            s[f.a][f.b]=1;
        }
        f.a=0;
        f.b=t.b;
        if(s[f.a][f.b]==0)
        {
            f.step=t.step+1;
            q[qian++]=f;
            s[f.a][f.b]=1;
        }
        f.a=t.a;
        f.b=0;
        if(s[f.a][f.b]==0)
        {
            f.step=t.step+1;
            q[qian++]=f;
            s[f.a][f.b]=1;
        }
        f.b=t.b+t.a;
        f.a=t.a-(b-t.b);
        if(f.b>=b)
            f.b=b;
        if(f.a<0)
            f.a=0;
        if(s[f.a][f.b]==0)
        {
            f.step=t.step+1;
            q[qian++]=f;
            s[f.a][f.b]=1;
        }
        f.a=t.a+t.b;
        f.b=t.b-(a-t.a);
        if(f.a>=a)
            f.a=a;
        if(f.b<0)
            f.b=0;
        if(s[f.a][f.b]==0)
        {
            f.step=t.step+1;
            q[qian++]=f;
            s[f.a][f.b]=1;
        }
    }
    printf("impossible\n");
    return 0;
}
int main()
{
    while(scanf("%d %d %d",&a,&b,&p)!=EOF)
    {
        memset(s,0,sizeof(s));
        bfs();
    }
    return 0;
}
這道題目沒什麼好說的主要是沒注意到多組輸入錯了好幾遍

相關推薦

poj 3414 Pots 廣度優先搜尋

Hint #include<stdio.h> #include<string.h> int a,b,p; struct node { int a,b,step; } q[1000],t,f; int s[101][101]; int bfs() { int i;

Catch That Cow poj 4001(抓住那頭牛!) BFS(廣度優先搜尋

題目連結 其實就是求最短路徑問題,採用BFS即可。 AC程式碼如下: #include <iostream> #include <queue> using namespace std; const int maxn=2e5+5; bool vis[maxn];

poj 3414 Pots 搜尋

6 FILL(2) POUR(2,1) DROP(1) POUR(2,1) FILL(2) POUR(2,1)題意:給出三個數,如n,m,s,其中n,m,分別為兩個杯子的體積,開始杯子都為空,可以自由接水倒水,問這兩個杯子需要幾次操作可以使任意一個杯子中的水體積為s,輸出次數和操作方法,如果杯子中水體積達不

POJ 3414 Pots 記錄路徑的搜尋

Description You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i)

POJ 3414 -- Pots

沒有 chan pan mov 父節點 以及 表示 不可 http POJ 3414 -- Pots 題意: 給出了兩個瓶子的容量A,B, 以及一個目標水量C, 對A、B可以有如下操作: FILL(i) fill the pot i (1 ≤ i ≤ 2)

18.06.27 POJ 3414:Pots

oid pac spa pro word find ces font 8.0 描述 You are given two pots, having the volume of A and B liters respectively. The following operat

poj 3414 Pots(廣搜BFS+路徑輸出)

contents imp 進行 ace main 數組 ems string oid 轉載請註明出處:http://blog.csdn.net/u012860063?viewmode=contents 題目鏈接:http://poj.org/problem?id=3414

廣度優先搜尋雙佇列通用程式設計模板

廣度優先搜尋主要用於解決求最短問題,如最短路徑,最少變化步數問題等等,思想是從起點出發,按層遍歷,直到搜尋到目標或者已經搜尋完全部區域。通常利用佇列實現廣度優先搜尋,我這裡使用的雙佇列法,用一個佇列cur表示當前層,next表示由當前層擴充套件的下一層,用雙佇列有個好處是我們只需要定義一個全域性

POJ-3414 Pots(兩個杯子倒水問題) 【BFS】

題目傳送門 題目: 給你兩個杯子a,b,容量分別是A和B。可以執行以下操作: 1.FILL(i):將i倒滿水。 2.DROP(i):將i倒空水。 3.POUR(i,j): 將ipot的水倒到jpot上,直至要麼ipot為空,要麼jpot為滿。 求能否在一定步數的操作後,使得a,b

演算法7-6:圖的遍歷——廣度優先搜尋

http://www.dotcpp.com/oj/problem1703.html 題目描述 廣度優先搜尋遍歷類似於樹的按層次遍歷的過程。其過程為:假設從圖中的某頂點v出發,在訪問了v之後依次訪問v的各個未曾被訪問過的鄰接點,然後分別從這些鄰接點出發依次訪問它們的鄰接點,並使“先被訪問的

佇列的JS實現及廣度優先搜尋(BFS)的實現

佇列是先進先出(FIFO)的資料結構,插入操作叫做入隊,只能新增在佇列的末尾;刪除操作叫做出隊,只能移除第一個元素。在JS中,用陣列可以很簡單的實現佇列。 function Queue () { this.queue = []; } // 增加 Queue.prototype.enQueue = f

廣度優先搜尋(鄰接表)

#include <iostream> #include <cstdio> #include <vector> #include <queue> using namespace std; struct Node{ //to 代表每個節點

利用佇列廣度優先搜尋

//廣度優先搜尋樹,一定要使用佇列,佇列的特性很好用 import java.util.*; public class Guangduyouxiansousuosuanfa1 { public static void main(String args[]){ Scanner

【BFS】層層遞進—廣度優先搜尋

【BFS】層層遞進—廣度優先搜尋 Breadth First Search 啊哈演算法 迷宮中尋找小哈   #include <iostream> #include <stdio.h> #include <stdlib.h> using na

資料結構——圖(4)——廣度優先搜尋(BFS)演算法思想

廣度優先搜尋 儘管深度優先搜尋具有許多重要用途,但該策略也具有不適合某些應用程式的缺點。 深度優先方法的最大問題在於它從其中一個鄰居出發,在它返回該節點或者是訪問其他鄰居之前,它必須訪問完從出發節點開始的整個路徑。 如果我們嘗試在一個大的圖中發現兩個節點之間的最短路徑,則使用深度優先

python 遞迴深度優先搜尋廣度優先搜尋演算法模擬實現

一、遞迴原理小案例分析 (1)# 概述 遞迴:即一個函式呼叫了自身,即實現了遞迴 凡是迴圈能做到的事,遞迴一般都能做到! (2)# 寫遞迴的過程 1、寫出臨界條件2、找出這一次和上一次關係3、假設當前函式已經能用,呼叫自身計算上一次的結果,再求出本次的結果 (3)案例分析:求1+2+3+…+n的數和

鄰接表建立無向圖,廣度優先搜尋遍歷輸出

1 #include<stdio.h> 2 #include<string.h> 3 #include <iostream> 4 #include<algorithm> 5 using namespace std; 6 #defin

深度優先搜尋遍歷與廣度優先搜尋遍歷

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

無向圖鄰接連結串列的廣度優先搜尋

個人認為圖的演算法看起來非常簡潔,但是實現起來需要基礎很紮實。因為經常會涉及多種簡單的資料結構,怎樣把他們恰當的串聯起來,不會報那種,空指標了,型別不匹配,實體型別不符合了等等。 在做無向圖鄰接連結串列廣度優先搜尋的時候,寫的很冒火,想去找別的博主的程式碼借鑑一下,發現大部分,真的是大部分,

搜尋_BFS(廣度優先搜尋)_演算法分析

    為方便討論BFS演算法, 考慮對圖的每個結點設定屬性color表示結點的顏色, color可取WHITE, GRAY, BLACK, 設定屬性d表示對應結點到源結點的最短路徑長度, 設定屬性p, 其中v.p表示存在一條從源結點到結點v的最短路徑且v的前驅為v.p, 下