-2
特定の隣接行列で表されるグラフが2部グラフであるかどうかをチェックする必要があります。いくつかのコードを書きましたが、以下のテスト隣接行列に対しては常にfalse
が返されます。true
を返す必要があります。2部グラフC++
入力:
10
0 1 0 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 1 0 1
0 0 1 0 0 1 0 0 1 0
1 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1 0 1
0 0 1 0 0 0 0 0 1 0
0 0 1 0 0 1 0 0 1 0
0 0 0 1 0 0 1 1 0 0
0 0 1 0 0 1 0 0 0 0
出力:
YES
1 3 6 9
コード:
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
bool bipartite=true;
vector<vector<int>>g;
vector<int>visit;
vector<int>colour;
int n;
void dfs(int v)
{
visit[v] = 1;
if (colour[v] == 0)
{
colour[v] = 1;
}
for (int i = 0; i < g[v].size(); i++)
{
if (visit[i] == 0)
{
if (colour[v] == 1)
{
colour[i] = 2;
}
else
colour[i] = 1;
dfs(i);
}
if (visit[i] == 1 && colour[i] == colour[v])
bipartite = false;
}
}
int main()
{
ifstream fin("input.in");
ofstream fout("output.out");
int a;
fin >> n;
g.resize(n);
visit.resize(n);
colour.resize(n);
for (int i = 0; i < g.size(); i++)
{
for (int j = 0; j < n; j++)
{
fin >> a;
g[i].push_back(a);
}
}
for (int i = 0; i < n; i++)
{
if (visit[i] == 0)
dfs(i);
}
cout << bipartite;
return 0;
}
さて、このような問題点を解決する – AndyG
適切なツール:-)あなたのデバッガに慣れるための素晴らしい時間ですが、あなたのデバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –