70pts求助!
查看原帖
70pts求助!
160870
迟陌楼主2023/9/19 22:37

开了二维数组,我的思路是设置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;
}
2023/9/19 22:37
加载中...