啃煤球的小西瓜 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++下使用。

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?