开了二维数组,我的思路是设置1,-1,0三种情况存储人与人之间的关系状态,但是后三个点毫无意外地越界了,求大佬指点指点这种思路能不能再做下去
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int relation[30000][3000] = { 0 };
int n;
int read()
{
char c = getchar();
int s = 0;
while (c >= '0' && c <= '9')
{
s = s + c - '0';
c = getchar();
}
return s;
}
int search(int c1, int c2)
{
for (int i = 1; i <= n; i++)
{
if (i == c1 || i == c2)
continue;
if (relation[c1][i] * relation[c2][i] < 0|| relation[i][c1] * relation[i][c2] < 0)
{
return 0;
}
}
return 1;
}
int main()
{
int frd1, frd2;
int enmy1, enmy2;
int sum = 0;
int p, q;
cin >>n>> p >> q;
if (!(p + q))
{
printf("%d", (n * (n - 1)) / 2);
return 0;
}//不分敌我直接Cn2输出即可
for (int i = 1; i <= p; i++)
{
cin >> frd1 >> frd2;
relation[frd1][frd2] = 1;
relation[frd2][frd1] = 1;
}
for (int i = 1; i <= q; i++)
{
cin >> enmy1 >> enmy2;
relation[enmy1][enmy2] = -1;
relation[enmy2][enmy1] = -1;
}
for (int i = 1; i <= n; i++)
{
for (int j = i+1; j <= n; j++)
{
if (relation[i][j] == 1)
sum++;
if (!relation[i][j])
sum += search(i, j);
}
}
printf("%d", sum);
return 0;
}