如果边的权重只有0和1,能否优化上述代码
时间: 2024-02-12 19:05:15 浏览: 57
如果边的权重只有0和1,可以将邻接矩阵中的值用布尔类型来表示,这样可以避免使用整型变量来存储边的权重,从而减少空间的使用。同时,可以将深度优先搜索中判断节点是否已被访问的数组从整型数组改为布尔类型数组,这样也能减少空间的使用。修改后的代码如下所示:
```
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
const int MAXN = 1005;
bool vis[MAXN];
bool G[MAXN][MAXN]; // 邻接矩阵表示图
void dfs(int x)
{
vis[x] = true;
for(int i = 0; i < MAXN; i++)
{
if(G[x][i] && !vis[i])
{
dfs(i);
}
}
}
int main()
{
int n, m;
cin >> n >> m;
for(int i = 0; i < m; i++)
{
int u, v;
cin >> u >> v;
G[u][v] = true;
G[v][u] = true;
}
int cnt = 0; // 记录连通块的数量
for(int i = 1; i <= n; i++)
{
if(!vis[i])
{
dfs(i);
cnt++;
}
}
cout << cnt << endl;
return 0;
}
```
阅读全文