链式前向星删除点c++完整代码
时间: 2023-11-13 15:06:33 浏览: 72
以下是链式前向星删除点c的完整代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 100005;
int head[MAXN], ver[MAXN], nxt[MAXN], idx = 1;
bool vis[MAXN];
void add(int x, int y) {
ver[idx] = y;
nxt[idx] = head[x];
head[x] = idx++;
}
void del(int x) {
vis[x] = true;
for (int i = head[x]; i; i = nxt[i]) {
int y = ver[i];
if (!vis[y]) {
del(y);
}
}
head[x] = 0; // 删除x的所有出边
}
int main() {
int n, m;
cin >> n >> m;
// 建图
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
add(a, b);
add(b, a);
}
int c;
cin >> c;
del(c); // 删除c及其可达的点
// 输出剩余节点
vector<int> ans;
for (int i = 1; i <= n; i++) {
if (!vis[i]) {
ans.push_back(i);
}
}
cout << ans.size() << endl;
for (int i : ans) {
cout << i << " ";
}
cout << endl;
return 0;
}
```
该代码使用了递归的方式删除点c及其可达的点,并使用vis数组记录所有被删除的点。在遍历完所有可达的点后,将该点的所有出边置为0,表示删除该点的所有出边。
最后,遍历所有节点,输出未被删除的节点即可。
阅读全文