求代码详细注释
查看原帖
求代码详细注释
359642
Chromedome楼主2021/10/28 21:37
//40~60pts 
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1005;
int vex[MAXN],k,n,m,q;
struct edge {
	int u,v,next;
}e[MAXN*2];
int vis[MAXN][MAXN];
void add(int u,int v){
	k++;
	e[k].u=u;
	e[k].v=v;
	e[k].next=vex[u];
	vex[u]=k;
}
void dfs(int u,int s){
	if(s==-1||vis[u][s]) return;
	vis[u][s]=1;
	for(int i=vex[u];i;i=e[i].next){
		int v=e[i].v;
		dfs(v,s-1);
	}
	return;
}
int main(){
	cin>>n>>m>>q;
	while(m--){
		int u,v;
		cin>>u>>v;
		add(u,v);
		add(v,u);
	}
	while(q--){
		int u,L;
		memset(vis,0,sizeof(vis));
		cin>>u>>L;
		dfs(u,L);
		if(vis[1][0]) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}

希望能解释清楚:

1.dfs 的两个参数设计,不太理解。

2.尤其是 vis 数组两个下标的设计,怎么想的?

3.dfs 第二个参数,和 vis 数组之间的配合,是怎么考虑的?

#在线焦急等待

2021/10/28 21:37
加载中...