bfs交换瓶子c++
时间: 2024-01-05 08:19:47 浏览: 87
换瓶子问题,简单的c语言逻辑,侵删
以下是使用BFS算法进行瓶子交换的C++代码示例:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int N = 10010;
bool visited[N]; // 记录是否访问过
int bottles[N]; // 记录每个位置的瓶子编号
int n; // 瓶子的数量
int bfs() {
int cnt = 0; // 记录环的数量
for (int i = 1; i <= n; i++) {
if (!visited[i]) { // 如果当前位置未被访问过,说明是一个新的环
cnt++;
queue<int> q;
q.push(i);
visited[i] = true;
while (!q.empty()) {
int cur = q.front();
q.pop();
int next = bottles[cur];
if (!visited[next]) { // 如果下一个位置未被访问过,将其加入队列
q.push(next);
visited[next] = true;
}
}
}
}
return n - cnt; // 返回需要交换的次数
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> bottles[i];
}
int res = bfs();
cout << res << endl;
return 0;
}
```
阅读全文