一件事情(一定要看到最后)
  • 板块灌水区
  • 楼主yangkaiyi
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/8/9 07:23
  • 上次更新2024/8/9 09:15:50
查看原帖
一件事情(一定要看到最后)
1226849
yangkaiyi楼主2024/8/9 07:23

事情的开端:

我,本要去上课,却因身体不适,没来上课,导致题目不会,蛋柿,我还是做出了两道,结果,我妈要我做出全部,这不,她来了

事情的经过:

总说别人家的孩子,于是我那天晚上一赌气,诶,说要把这几道题全部做出来,结果,只能做出两道(详情看上面的开端),我妈很生气,让我***

此时,重要的就来了,这题怎么做: 读到这,你肯定会情不自禁的感叹一声:emm 题目: 【B】图的遍历

【题目描述 graph.cpp】

给定一张n个点的图,求该图从1开始的深度优先序和广度优先序。

【输入格式 graph.in】

第一行一个整数n。

之后n行,为n*n的01矩阵,第i行第j列表示图上i和j是否有连边。

【输出格式 graph.out】

第一行n个数,表示图的深度优先序。

第二行n个数,表示图的广度优先序。

【样例】

【输入样例1】

8

0 1 1 1 0 0 0 0

1 0 0 0 0 1 0 0

1 0 0 0 1 0 0 0

1 0 0 0 1 1 1 0

0 0 1 1 0 0 0 0

0 1 0 1 0 0 0 0

0 0 0 1 0 0 0 1

0 0 0 0 0 0 1 0

【输出样例1】

1 2 6 4 5 3 7 8

1 2 3 4 6 5 7 8

【数据规模】

n≤100。

而这是我的代码:

#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize("02")
using namespace std;
int n,i,j,x,y,f[100010],fx,sx,t,w,c[100010];
vector <int> a[100010],b[100010];
void sc(int x){
  int i;
  cout<<x<<" ";
  for(i=0;i<a[x].size();i++)
  if(!f[a[x][i]])f[a[x][i]]=1,sc(a[x][i]);
}
main(){
  ios::sync_with_stdio(false);
  cin.tie(NULL);cout.tie(NULL);
  cin>>n;
  for(i=1;i<=n;i++)
  	for(j=1;j<=n;j++){
  		cin>>x;
  		if(x==1) a[i].push_back(j),a[j].push_back(i);
  	}
  f[1]=1;sc(1);cout<<"\n";memset(f,0,sizeof(f));
  t=w=1;c[1]=1;f[1]=1;
  while(t<=w){
  	fx=c[t];cout<<fx<<" ";
  	for(i=0;i<a[fx].size();i++){
  		sx=a[fx][i];
  		if(f[sx]==0) f[sx]=1,c[++w]=sx;
  	}
  	t++;
  }
  return 0;
}

求问,为何爆0

2024/8/9 07:23
加载中...