수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

floyd 알고리즘

중독된

2023.04.01

질문 내용 :
#include stdio.h
#include limits.h
#include stdlib.h
#include memory.h
typedef struct graph{
int no1;
int no2;
int dis;
}graph;
void floyd(int n, int cnt)
{
file *fp;
int **a, **weight;
int i, j, k;
graph temp;
fp = fopen(data.txt, r);
if(fp == null){
printf(파일 개방 실패!!!\n);
return;
}
weight = (int**)malloc(n * sizeof(*weight)); //2차원 배열 동적 할당
for(i = 0; i n; i++){
weight[i] = (int*)malloc(n * sizeof(**weight));
}
a = (int**)malloc(n * sizeof(*a)); //2차원 배열 동적 할당
for(i = 0; i n; i++){
a[i] = (int*)malloc(n * sizeof(**a));
}
for(i = 0; i n; i++){ //0으로 초기화
for(j = 0; j n; j++){
a[i][j] = 0;
weight[i][j] = 0;
}
}
for(i = 0; i cnt; i++){ //입력 부분
fscanf(fp, %d%d%d, &temp.no1, &temp.no2, &temp.dis);
weight[temp.no1][temp.no2] = temp.dis;
}
rewind(fp);
for(i = 0; i n; i++){ //배열 출력 부분
for(j = 0; j n; j++){
printf(%-4d, weight[i][j]);
}
printf(\n);
}
for(i = 0; i n; i++){ //a배열에 weight 배열을 덮어 씌움
for(j = 0; j n; j++){
a[i][j] = weight[i][j];
}
}
//
printf(\n\n); //확인
for(i = 0; i n; i++){
for(j = 0; j n; j++){
printf(%-4d, a[i][j]);
}
printf(\n);
}
//
for(k = 0; k n; k++){
for(i = 0; i n; i++){
for(j = 0; j n; j++){
if(a[i][k] + a[k][j] a[i][j]){
a[i][j] = a[i][k] + a[k][j];
}
}
}
}printf(\n\n); //확인
for(i = 0; i n; i++){
for(j = 0; j n; j++){
printf(%-4d, a[i][j]);
}
printf(\n);
}
printf(\n);
for(i = 0; i n; i++){ //메모리 동적할당 해제
free(weight[i]);
free(a[i]);
}
free(weight);
free(a);//여기까지
fclose(fp);
}

int main()
{
file *fp;
int max = 0;
graph temp;
int cnt = 0;
int i = 0, j = 0;

fp = fopen(data.txt, r);
if(fp == null){
printf(파일 개방 실패!!!\n);
return 0;
}
while(!feof(fp)){ //갯수 파악 및 최고 vertex 파악
fscanf(fp, %d%d%d, &temp.no1, &temp.no2, &temp.dis);
cnt++;
if(max temp.no1){
max = temp.no1;
}
if(max temp.no2){
max = temp.no2;
}
}
rewind(fp);
max += 1;
floyd(max, cnt);
fclose(fp);
return 0;
}/*************************************************************************
아무리 봐도 잘 모르겠어서 다시 질문 드립니다.
위에 빨갛게 해놓은 부분이 문제인데....
메인함수는 문서를 읽어들어 거기에 저장된 vertex의 최대값을 알아내고
기록되어있는 자료가 몇갠지 갯수를 파악하고 함수를 호출하고...

함수로 들어가면 다시 파일을 오픈하고 넘겨받은 매개인자 값으로 메모리를 동적할당합니다.
2차원 배열루요 그리고 weight 배열에 오픈한 파일에 들어있는 값을 집어 넣습니다.(파란색)
메모장에는 0 1 12 // 0 2 21이런 식으로 저장되어 있구요 //는 구분하기 위해 제가 임의로 한거고
그냥 엔터로 구분되어 있습니다. 앞에 숫자 2개는 vertex 넘버구요... 3번째 값은 앞의 2개 vertex에
대한 값입니다. 즉 0 1의 값은 12이고 0 2의 값은 21이 됩니다. 0에서 1로 가는데는 12만큼의 거리이고
0에서 2로 가는데는 21만큼의21만큼의 거리입니다.
그리고 밑에 출력은 제대로 입력이 되어 있는지 확인하기 위해 출력해 보는 것이고
그 바로 아래에는 weight배열에 입력되어 있는 값을 a배열에 복사합니다.
그리고 a배열에 제대로 복사 되었는지 다시 확인...

그리고 빨간색 부분인 floyd 알고리즘인데... 책 보고 그대로 타이핑한거고 다른 문제에서는
제대로 됐는데 이 문제에서는 안되네요... 아무튼 floyd 알고리즘을 지나고 나면 배열 a가
0으로 초기화 되버립니다.

배열 a에는 분명히 weight배열이 복사되었는데... 어째서 floyd 알고리즘만 지나면
초기화된 값이 출력이 되는지 모르겠습니다. ㅠ.ㅠ
*****************************************************************************/

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

번호 제 목 글쓴이 날짜
2699895 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) 선아 2025-06-30
2699842 질문을 너무 많이 하네여.....죄송.... (2) 해님꽃 2025-06-29
2699816 오류 질문입니다.. (1) 해비치 2025-06-29
2699763 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) 미라 2025-06-28
2699555 c언어 다항식을 입력을 했는데 왜 출력이 안될까요? 피스케스 2025-06-27
2699528 C언어 포인터연산 질문입니다. (3) 안녕나야 2025-06-26
2699476 끌어올림;;달력 짜봤는데요 이 소스 줄일 수 있나요? - 스샷첨부 (2) 클라우드 2025-06-26
2699444 [좀 급함] system("explorer [주소] ") 문에 변수를 사용할 수 있나요? 알 2025-06-26
2699415 파일//read//와 배열 아란 2025-06-25
2699386 구조체 안에 일부분만 char 배열에 복사하려면 어떻게 해야하나요? (1) 미즈 2025-06-25
2699361 연결리스트 정렬하는 부분에 대해서 질문 드립니다 아이처럼 2025-06-25
2699304 [기초]아직 안주무시는분 계신가요..?포인터배열? 좀 도와주세요. 놀리기 2025-06-24
2699272 printf() 함수이용해서 프로그램 만들기 질문요! (5) 다가 2025-06-24
2699221 PUSH와 POP코드를 더 간단하게 어떻게 해야할까요? 파라미 2025-06-24
2699192 설치오류가 자꾸 나요 한번봐주세여~ (1) 소녀틳향기 2025-06-23
2699161 for loop안에 있는 if문 (9) Orange 2025-06-23
2699105 링크더리스트 이전 링크값 출력함수. 꼬꼬마 2025-06-23
2699078 정수를 한자리씩 배열에 담는 법은 어떻게 하나요.. (4) 귀염포텐 2025-06-22
2699024 C언어 공부하려는데 도와주세요!!! (2) 달님 2025-06-22
2698994 날짜 계산하는 C 코드 짜고 있는데 꽉 막혀서 질문드립니다.. (6) 별 2025-06-22
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com