여기에 버그가 C에서 DFS ++를 사용하여 위상 정렬은위상 정렬을 사용하여 DFS
#include<iostream>
#include<stdio.h>
using namespace std;
int count=0;
static int *a=new int[8];
void dfs(int u,bool v[],bool matrix[][8])
{
v[u]=true;
for(int i=0;i<8;i++)
if(!v[i]&& matrix[u][i])
dfs(i,v,matrix);
a[count++]=u;
}
int main()
{
bool v[8];
bool matrix[8][8];
matrix[7][6]=true;
matrix[0][1];
matrix[1][2]=true;
matrix[2][3]=true;
matrix[3][4]=true;
matrix[2][5]=true;
for(int i=0;i<8;i++)
if(!v[i])
dfs(i,v,matrix);
for(int i=0;i<8;i++)
cout<<a[7-i]<<" ";
}
, 내가 행렬을 작성해야한다고 생각이 오류를 해결하기 위해 좀 도와주세요 (바인딩 오류 중)이다 [8] [ 2], 어떻게 그 후에 계속할 것인가?
범위를 벗어난 액세스'a [count ++] = u;'에 대한 후보가 하나 있습니다. 재귀 호출 중에'count'가 * 항상 * 범위 내에 있음을 어떻게 알 수 있습니까? –
어떤 오류가 발생합니까? 'v'와'matrix'에있는 많은 요소들이 초기화되지 않았다는 사실과 관련이 있습니까? – Attila
@BoPersson -'dfs '를 호출하는 조건은'v [i]'가'false'라는 것입니다. 'v'에는 단지 8 개의 원소가 있고'dfs'에서는 현재'false'로 설정되어 있습니다. 그래서 재귀 때문에 인덱스가 과잉 될 것이라고 생각하지 않습니다. – Attila