2014-10-28 11 views
0

給定一個集合S = {x1,x2,x3,x4,x5,...},其大小爲n(< 20),我需要列出所有格子S上的大小爲S的子集(大小爲k)(應作爲輸入,但在我的問題中,我將其修復用於調試目的)。偏序被定義的關係是可分性。偏序集的分節點錯誤(核心轉儲)

#include <stdio.h> 
#include <stdbool.h> 

typedef struct{ 
    int data; 
    struct node* next; 
}node; 

void addEdge(node* graph[],int a,int b){ 
    node *ptr=(node *)malloc(sizeof(node)); 
    ptr->next=graph[a]; 
    ptr->data=b; 
    graph[a]=ptr; 
} 

void buildGraph(node* graph[],int n){ 

    int i,j; 
    for(i=2;i<=n;i++){ 
     for(j=1;j<=i/2;j++){ 
      if(i%j==0){ 
       if(j!=1) addEdge(graph,i/j,i); 
       else addEdge(graph,j,i); 
      } 
     } 
    } 
} 

void printGraph(node* graph[],int n){ 
    int i=0; 
    node *ptr; 
    for(i=0;i<=n;i++){ 
     ptr=graph[i]; 
     printf("Row-%d ",i); 
     while(ptr!=NULL){ 
      printf("%d ",ptr->data); 
      ptr=ptr->next; 
     } 
     printf("\n"); 
    } 
} 

void print(int array[],int n){ 
    int i; 
    for(i=0;i<n;i++) printf("%d ",array[i]); 
    printf("\n"); 
} 

bool checkDuplicate(int array[],int n,int a){ 
    int i; 
    for(i=0;i<n;i++) if(array[i]==a) return false; 
    return true; 
} 
void formLattice(node* graph[],int lattice[],int k,int vertex,int level){ 
    //printf("Level-%d \n",level); 
    if(level>k) return; 
    if(level==k) { 
     lattice[level-1]=vertex; 
     print(lattice,k); 
     return; 
    } 
    lattice[level-1]=vertex; 
    node* ptr=graph[vertex]; 
    while(ptr!=NULL){ 
    // if(checkDuplicate(lattice,level,ptr->data)) 
     formLattice(graph,lattice,k,ptr->data,level+1); 
     ptr=ptr->next; 
    } 
} 
void printLattice(node* graph[],int n,int k){ 
    int lattice[k],i; 
    node* ptr; 
    for(i=1;i<=n;i++){ 
     ptr=graph[i]; 
     while(ptr!=NULL){ 
      lattice[0]=i; 
      formLattice(graph,lattice,k,ptr->data,2); 
      ptr=ptr->next; 
     } 
    } 
} 
int main(void) { 

    int n=10,k=4; 
    node* graph[n+1]; 
    int i; 
    for(i=0;i<=n;i++) graph[i]=NULL; 
    buildGraph(graph,n); 
// printGraph(graph,n); // Comment to print out the Hasse Diagram 
    printLattice(graph,n,k); 
    return 0; 
} 

顯示Segementation故障(核心轉儲) 任何想法,爲什麼會出現這種情況呢? 由於提前

回答

0

formLattice()的代碼有,只有那些頂點被探查連接到lattice[level-1]lattice[level]證據。當然,並不是每個格子都有一個總秩序(即{1,2,3,6})。當前程序如何選擇頂點3作爲lattice[2]而頂點2被存儲到lattice[1]

換句話說,必須有另一種循環,從0lattice去爲所有已經選擇頂點到level-1,本環周圍ptr