위상정렬의 개념에 따라 코드를 작성했습니다. 초기에 조금씩 조금씩 수정하면서 수행했엇고 제출했을시 답안은 틀렸었지만 런타임에러는 안떴습니다. 그러나 단지 우선순위 배열 prior, 그리고 위상정렬의 선행 순위 indegree? 개념을 적용했는데 갑자기 런타임에러가 뜨면서 런타임이 어디서 에러가 났는지는 보이질 않습니다. 어떤것 이 문제일까요?
#include <stdio.h> #include <stdlib.h> int t[1001], a[1001], deg[1001], prior[1001], head=0; typedef struct queue{ int v; struct queue* next;}queue; queue* q[1001]; void init(int a){ q[a]=(queue*)malloc(sizeof(queue)); q[a]->next=0; q[a]->v=0; } void push(int a, int b){ queue* p = q[a]; while(p->next) p=p->next; p->v=b; p->next=(queue*)malloc(sizeof(queue)); // p->next->v=0; p->next->next=0; <---------- 여기는 문제없어보입니다... } int main(){
int T; scanf("%d", &T); while(T--){ int n, k, ans; scanf("%d %d", &n, &k); for (int i=1; i<=n; i++){ scanf("%d", &t[i]); init(i);} for (int i=0; i<k; i++) { int u, v; scanf("%d %d", &u, &v); push(u, v); deg[v]++; } for (int i=1; i<=n; i++) if (!deg[i]) prior[head++]=i;
gaelim 6년 전
위상정렬의 개념에 따라 코드를 작성했습니다. 초기에 조금씩 조금씩 수정하면서 수행했엇고 제출했을시 답안은 틀렸었지만 런타임에러는 안떴습니다. 그러나 단지 우선순위 배열 prior, 그리고 위상정렬의 선행 순위 indegree? 개념을 적용했는데 갑자기 런타임에러가 뜨면서 런타임이 어디서 에러가 났는지는 보이질 않습니다. 어떤것 이 문제일까요?
#include <stdio.h>
#include <stdlib.h>
int t[1001], a[1001], deg[1001], prior[1001], head=0;
typedef struct queue{ int v; struct queue* next;}queue;
queue* q[1001];
void init(int a){
q[a]=(queue*)malloc(sizeof(queue));
q[a]->next=0;
q[a]->v=0;
}
void push(int a, int b){
queue* p = q[a];
while(p->next) p=p->next;
p->v=b;
p->next=(queue*)malloc(sizeof(queue));
// p->next->v=0; p->next->next=0; <---------- 여기는 문제없어보입니다...
}
int main(){
int T;
scanf("%d", &T);
while(T--){
int n, k, ans;
scanf("%d %d", &n, &k);
for (int i=1; i<=n; i++){ scanf("%d", &t[i]); init(i);}
for (int i=0; i<k; i++) {
int u, v;
scanf("%d %d", &u, &v);
push(u, v);
deg[v]++;
}
for (int i=1; i<=n; i++)
if (!deg[i]) prior[head++]=i;
//start <---------- 여기부터 주로 수정했었는데 런타임에러가 빵 떳습니다.
for (int i=0; i<head; i++){
for(queue* p= q[prior[i]];p;p=p->next){
if(a[p->v]<t[prior[i]]+a[prior[i]]) a[p->v]=t[prior[i]]+a[prior[i]];
deg[p->v]--;
if(!deg[p->v]) prior[head++]=p->v;
}
}
scanf("%d", &ans);
printf("%d\n", t[ans]+a[ans]);
}
}