Tôi có một quy trình bị giết ngay lập tức sau khi thực hiện chương trình. Đây là mã của tệp thực thi được biên dịch, và nó là một chương trình nhỏ đọc một số biểu đồ được biểu thị bằng số từ đầu vào tiêu chuẩn (tệp mô tả thường) và tìm cây bao trùm tối thiểu cho mọi đồ thị bằng thuật toán của Prim (nó không hiển thị kết quả nào, nó chỉ tìm ra giải pháp).Quá trình bị giết bởi SIGKILL
#include <stdlib.h>
#include <iostream>
using namespace std;
const int MAX_NODOS = 20000;
const int infinito = 10000;
int nnodos;
int nAristas;
int G[MAX_NODOS][MAX_NODOS];
int solucion[MAX_NODOS][MAX_NODOS];
int menorCoste[MAX_NODOS];
int masCercano[MAX_NODOS];
void leeGrafo(){
if (nnodos<0 || nnodos>MAX_NODOS) {
cerr << "Numero de nodos (" << nnodos << ") no valido\n";
exit(0);
}
for (int i=0; i<nnodos ; i++)
for (int j=0; j<nnodos ; j++)
G[i][j] = infinito;
int A,B,P;
for(int i=0;i<nAristas;i++){
cin >> A >> B >> P;
G[A][B] = P;
G[B][A] = P;
}
}
void prepararEstructuras(){
// Grafo de salida
for(int i=0;i<nnodos;i++)
for(int j=0;j<nnodos;j++)
solucion[i][j] = infinito;
// el mas cercaano
for(int i=1;i<nnodos;i++){
masCercano[i]=0;
// menor coste
menorCoste[i]=G[0][i];
}
}
void prim(){
prepararEstructuras();
int min,k;
for(int i=1;i<nnodos;i++){
min = menorCoste[1];
k = 1;
for(int j=2;i<nnodos;j++){
if(menorCoste[j] < min){
min = menorCoste[j];
k = j;
}
}
solucion[k][masCercano[k]] = G[k][masCercano[k]];
menorCoste[k] = infinito;
for(int j=1;j<nnodos;j++){
if(G[k][j] < menorCoste[j] && menorCoste[j]!=infinito){
menorCoste[j] = G[k][j];
masCercano[j] = k;
}
}
}
}
void output(){
for(int i=0;i<nnodos;i++){
for(int j=0;j<nnodos;j++)
cout << G[i][j] << ' ';
cout << endl;
}
}
int main(){
while(true){
cin >> nnodos;
cin >> nAristas;
if((nnodos==0)&&(nAristas==0)) break;
else{
leeGrafo();
output();
prim();
}
}
}
Tôi đã học được rằng tôi phải sử dụng strace để tìm thấy những gì đang diễn ra, và đây là những gì tôi nhận được:
execve("./412", ["./412"], [/* 38 vars */] <unfinished ...>
+++ killed by SIGKILL +++
Killed
Tôi đang runing ubuntu và đây là lần đầu tiên tôi nhận được loại lỗi. Chương trình được cho là dừng sau khi đọc hai số không trong một hàng từ đầu vào mà tôi có thể đảm bảo rằng tôi có trong tệp mô tả đồ thị của tôi. Ngoài ra vấn đề xảy ra ngay cả khi tôi thực hiện chương trình mà không làm một chuyển hướng đầu vào vào tệp đồ thị của tôi.
Logic chương trình của bạn rất khó theo dõi. Trình gỡ lỗi của bạn đã nói gì về tình huống này? –
Điều cần lưu ý: Các mảng có kích thước cố định của bạn rất lớn. Khi khởi chạy, bạn sẽ cần> '3.2 GB' ... Đó có thể là vấn đề. – Mysticial
@ TomalakGeret'kal: Logic chương trình không liên quan; không ai trong số họ thực hiện! – Gabe