무한루프에 빠집니다.!! 해결좀부탁드려요
집1어치워
#include stdio.hint e[100][100]={0};
int v[100]={0};
int s[100]={0};
int V,E;
int i=0,j=0;
int Node=0;
int v1=0,v2=0;
int a=0;
int count = 0;void dfs(int a)
{
printf(%d,a);
v[a] = 1;
s[count] = a;
count++; for(i=0;iE;i++)
{
if(e[a][i]==1 && v[i] == 0)
{
dfs(i);
}
else if(count0)
{
break;
}
else if(count=0)
{
count--;
dfs(count);
}
}
}
void main()
{
FILE *inf=fopen(C:\\Work\\이산수학4\\math.txt,r);
fscanf(inf,%d,&V);
fscanf(inf,%d,&E);
for(i=1;i=E;i++)
{
fscanf(inf,%d %d,&v1,&v2);
e[v1][v2]=1;
e[v2][v1]=1;
}
fclose(inf); dfs(0);
}이런 소스입니다.파일입력을 통해 배열에 원소를받고 dfs함수를 통해 값을 출력하는건데 dfs함수가 무한루프가 도네요
else if(count0)
{
break;
}
else if(count=0)
{
count--;
dfs(count);
}
이부분이 문제인거같은데 해결좀해주세요!!
-
목향
근데 저런 dfs 같은경우는 void 형이무로 return 값이 존재할수없으니 if 문을 이용해서 dfs 의 재귀함수 반복조건을 거짓으로 만들어주시면됩니다
예를들자면
void a(int a)
{
int a = 10;
printf(\%d\ -
리나
재귀함수라.. 값을 리턴 한다기 보다는 함수의 종료를 의미하는 리턴이 되겠죠
지금은 리턴타입이 void 니까 특별한 값을 리턴하는게 아니라 함수 끝내라고 return; 하면 돼요 -
해리
return 0; 같은거요
-
WhiteCat
브레이크는 반복문만 탈출해줍니다 재귀함수는 반복문과는 조금다르죠
-
진나
리턴이 무슨값을 리턴??말씀하시는거죠;;;
-
큰아
break.. 가장 가까운 반복문을 탈출 하는거지 dfs를 탈출하는건 아니에요..
return 을 하셔야죠 -
갈기슭
브레이크가 탈출이 아닌가요?..아 너무 어렵네요..
E값은 밑에 파일입력으로 받는거 맞지않나요? -
큰돛
음 대충보기에는요일단
E 값이 정의되어있지않네요..
그리고 dfs 를 재귀함수로 쓰시는듯한데 그것도 언뜻보기에는 dfs 재귀함수 루프를 탈출하는 조건이 없어보이네요 -
비마중
소스 수정해드릴게요 해결좀해주세요 ㅠㅠ
-
아련나래
E 가 뭔데요? count는? 소스 이거 가지고서는.. 원인을 알수가 없지요