这个是因为你的变量
int eenum[3020000];
int jnum[500000];
是定义在栈里的,而windows里面每个应用程序能使用的栈空间最大只有1MB,你这应经超过范围了,所以会出现栈溢出的错误,但是下面的代码是把这两个数组定义在全局范围的,所以没有你这个限制,因此没有错误,其实程序的逻辑上这两个程序没什么区别的,你只要把这两个定义为全局的就好了
直接BFS即可
不用并查集
#include
#include
#include
#include
using namespace std;
bool adj[2001][2001];
bool odd[2001];
bool vis[2001];
bool sex[2001];
bool flag;
int num;
void bfs(int j)
{
queue
while(!q.empty()) q.pop();
q.push(j);
odd[j] = true;
vis[j] = true;
int loc;
while(flag&&!q.empty())
{
loc = q.front();
q.pop();
for(int it=0;it
if(adj[loc][it]==false) continue;
if(vis[it])
{
if(odd[it] == odd[loc])
{
flag = false;
return;
}
}
else
{
vis[it] = true;
odd[it] = !(odd[loc]);
q.push(it);
}
}
}
}
int main()
{
int N;
cin >> N;
for(int i=1;i<=N;i++)
{
cout << "Scenario #" << i << ":" << endl;
cin >> num;
int inter;
cin >> inter;
flag = true;
memset(adj,0,sizeof(adj));
for(int j=0;j
int m,n;
cin >> m >> n;
if(!flag) continue;
if(m<=num&&n<=num&&m>0&&n>0)
{
adj[m-1][n-1] = adj[n-1][m-1] = true;
}
else
flag = false;
}
memset(vis,0,sizeof(bool)*num);
for(int j=0;flag&&j
if(!vis[j])
bfs(j);
}
if(!flag)
cout << "Suspicious bugs found!" << endl << endl;
else cout << "No suspicious bugs found!" << endl << endl;
}
return 0;
}
好邪恶的孩子...
170035036 加这个群 问问里面的高手