2022.6.23(dfs)
五月
题目描述:
我的题解:
//深度优先搜索
void dfs(int *nums,int i,int *stack,int *top,bool *isVisisted){
if(isVisisted[i] == true){
return;
}
isVisisted[i] = true;
stk[(*top)++] = nums[i]; //把数字放入栈
dfs(nums,nums[i],stack,top,isVisisted);//递归找下面的结点
}
int arrayNesting(int* nums, int numsSize){
int *stack = malloc(sizeof(int)*numsSize);
memset(stk,0,sizeof(int)*numsSize);
int *res = malloc(sizeof(int)*numsSize);
memset(res,0,sizeof(int)*numsSize);
bool *isVisisted = malloc(sizeof(int)*numsSize);
memset(isVisisted,0,sizeof(int)*numsSize);
int top = 0,max = 0;
for(int i = 0;i<numsSize;i++){
top = 0; //每次要初始化一下
dfs(nums,i,stack,&top,isVisisted);
if(top > max){
res = stk;
max = top;
}
}
return max;
}
我的思路:
写一个dfs函数然后递归的找其中的往下找,不满足直接返回,函数返回的是每一个单连通分量的节点数量,同时将遍历过的节点 标记为true。遍历每一个单连通分量,取每一个单连通分量的最大值返回即可。
题目描述:
我的题解:
不会实在不会等我回头再学学看看,这里记录一下