NYOJ21三個水杯

2021-07-22 09:11:05 字數 927 閱讀 3152

思路:一共分12種情況  舉個例子 a -> c倒水的時候,可能把c裝滿,可能不滿。這就是兩種情況 

所有的情況 a -> b (b可能滿,可能不滿)

a -> c

b -> a

b -> c

c -> a

c -> b 

然後逐個搜尋一遍就好了。。

**:

#include #include typedef struct node

node;

node que[1000];

const int max_v = 100;

int v[max_v][max_v][max_v];

int v1,v2,v3;

int e1,e2,e3;

int flag;

void bfs()

if(t.x > v2 - t.y ) // a -> b

}if(t.x <= v2 - t.y ) // a -> b

}if(t.x > v3 - t.z) // a -> c

}if(t.x <= v3 - t.z) // a -> c

}if(t.y > v1 - t.x) // b -> a

}if(t.y <= v1 - t.x) // b -> a

}if(t.y > v3 - t.z) // b -> c

}if(t.y <= v3 - t.z) // b -> c

}if(t.z > v1 - t.x) //c -> a

}if(t.z <= v1 - t.x) //c -> a

}if(t.z > v2 - t.y) // c -> b

}if(t.z <= v2 - t.y) // c -> b}}

}int main()

return 0;

}

NYOJ21 三個水杯

題目分析 暴力 bfs。將所有可能的狀態壓到佇列中,直到找到目標狀態為止。我自己ac的 include include 三個水杯的盛水的狀態 struct node node queue 100 bool used 101 101 101 inline void pour node p,int ta...

NYOJ21 三個水杯

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。輸入第一行乙個整數...

nyoj21三個水杯。。

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。輸入第一行乙個整數...