啃煤球的小西瓜 2017-08-16 01:49 采纳率: 55.6%
浏览 1857

小白不懂,#include<stdio.h>不是c的头文件吗?为什么用C提交不正确,用C++却正确

程序如下:
#include
const int max_num=100010;
typedef struct
{
int num,root,conn;//数据,根结点,入度
}Node;
Node node[max_num];

void init()//初始化
{
for(int i=0;i<max_num;i++)
{
node[i].conn=0;//入度初始化为0
node[i].root=i;//根结点为自身
node[i].num=0;//标记数字是否用过。0-没用过,1-用过
}
}

int find(int a)//寻找它的根节点
{
if(node[a].root!=a)
return node[a].root=find(node[a].root);
else
return node[a].root;
}

void merge(int a,int b)//合并
{
a=find(a),b=find(b);
if(a==b)//同一个根,说明在同一棵树里
return;
node[b].root=a;//把b的根结点赋给a的根结点,此时a已经是根结点
}

int main()
{
int n,m,i=1;
bool flag=true;
init();
while(scanf("%d%d",&n,&m)!=EOF&&n>=0&&m>=0)
{
if(!flag&&n!=0&&m!=0)continue;//判断是否是树
if(n==0&&m==0)//说明输入结束,开始处理吧
{
int root_num=0;
for(int j=1;j {
//判断是否为森林。如果是,用root_num来记录根的数目
if(node[j].num&&find(j)==j)
root_num++;
if(node[j].conn>1)//如果出现某个节点的入度超过1,则不是树
{
flag=false;
break;
}
}
if(root_num>1)//连通分支大于1,是森林,不是树
flag=false;
if(flag)
printf("Case %d is a tree.\n",i++);
else printf("Case %d is not a tree.\n",i++);
init();//为下一个case处理进行初始化
continue;
}
if(m!=n&&find(n)==find(m)||m==n)
flag=false;
else
{
//将m,n记为结点
node[m].num=1;
node[n].num=1;
node[m].conn++;//入度加一
merge(n,m);
}
}
return 0;
}

  • 写回答

3条回答 默认 最新

  • Tsui丶 2017-08-16 01:58
    关注

    报错问题:
    Options->Directories->Include directories:
    看看你的Include文件夹和所设置的是否一样。
    不一样,改过来。
    Options->Save options->CR

    另外 c是c++的子集,所以大部c语言程序都可以不加修改的拿到c++下使用。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog