当前位置: 首页 > news >正文

洛谷5318C语言题解

这道题一开始想直接使用邻接矩阵解决

BUT:

如果你要建立一个二维数组,内存就爆了

SO——邻接表

为什么邻接表能行?

  1. 空间利用率更高

  2. 构建也方便

构建时需要注意: 这里相当于是一个有向图而不是无向图

就拿题目中的样例来说

进行dfs,如果你是按照无向图进行构建的话

输出的结果回事12563748

而题目中要的是12563784

当然book函数进行记录也是必不可少的(毕竟是图而不是树)

#include<stdio.h>#include<stdlib.h>int n,m;
typedef struct node{int data;struct node*next;
}node;
node*nod[100010];
int book[100010];
void insertedge(int x,int y){node*p=(node*)malloc(sizeof(node));p->data=y;node*tmp=nod[x];while(tmp->next&&tmp->next->data<y){tmp=tmp->next;}p->next=tmp->next;tmp->next=p;
}void dfs(int index){if(index>n)return ;printf("%d ",nod[index]->data);book[index]=1;node*p=nod[index]->next;while(p!=NULL){if(!book[p->data]){dfs(p->data);book[p->data]=1;}p=p->next;}}void bfs(){int que[100000];int book1[100010]={0};int head,tail;head=tail=1;que[tail]=nod[1]->data;book1[nod[1]->data]=1;tail++;while(head<tail){printf("%d ",que[head]);node*p=nod[que[head]]->next;while(p){if(book1[p->data]==0){que[tail++]=p->data;book1[p->data]=1;}p=p->next;}head++;}}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){nod[i]=(node*)malloc(sizeof(node));nod[i]->data=i;nod[i]->next=NULL;}while(m--){int x,y;scanf("%d%d",&x,&y);insertedge(x,y);}dfs(1);printf("\n");bfs();}

相关文章:

  • Linux CAN 驱动浅析
  • 私有知识库 Coco AI 实战(二):摄入 MongoDB 数据
  • 【问题解决】本机navicat连接云服务器mysql
  • 工作记录9
  • 【Pandas】pandas DataFrame mod
  • 【复盘】cpu飙升引发的连锁反应
  • JDK 7 Update 0 (64位) 详细Windows 安装指南
  • 每日一题(小白)模拟娱乐篇33
  • Java 拦截器完全指南:原理、实战与最佳实践
  • Chronos - 时间序列预测语言模型
  • Redis从入门到实战先导篇
  • Jsoup、Selenium 和 Playwright 的含义、作用和区别
  • 【C/S通信仿真】
  • 17.QT-Qt窗口-工具栏|状态栏|浮动窗口|设置停靠位置|设置浮动属性|设置移动属性|拉伸系数|添加控件(C++)
  • 软件黑盒与白盒测试详解
  • 大厂Java面试:JVM调优与问题定位
  • 我的独立开发技术栈
  • Kotlin中实现静态
  • 深入解析C++ STL Queue:先进先出的数据结构
  • IMU---MPU6050
  • 吃菜和吃肉,哪个更“增肌”?
  • 2025年中央金融机构注资特别国债发行,发行金额1650亿
  • 央媒关注脑瘫女骑手:7年跑出7.3万多份单,努力撑起生活
  • 郑庆华任同济大学党委书记
  • 灰鹦鹉爆粗口三年未改?云南野生动物园:在持续引导
  • 重庆市委原常委、政法委原书记陆克华严重违纪违法被开除党籍和公职