八皇后问题

来源:互联网 发布:马甲网络收货平台 编辑:程序博客网 时间:2024/06/15 14:44
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct treeNode{
int data;
struct treeNode* child[8];
struct treeNode* father;
}TNODE;
typedef struct tree{
TNODE* root;
}TREE;
typedef struct linkNode{
TNODE* curr;
struct linkNode* next;
}LNODE;
typedef struct resultLink{
LNODE* head;
}RLINK;
void getChild(TNODE*,int ,RLINK*);
TREE* initTree();
RLINK* initLink();
void addNode(RLINK*,TNODE*);
void print(RLINK* );
int main(){
//init tree
TREE* tree;
RLINK* link;
tree=initTree();
tree->root=(TNODE*)malloc(sizeof(TNODE));
link=initLink();

getChild(tree->root,0,link);


print(link);


return 0;


}
TREE* initTree(){
TREE* root;
root=(TREE*)malloc(sizeof(TREE));
root->root=(TNODE*)malloc(sizeof(TNODE));
return root;
}
RLINK* initLink(){
RLINK* link=(RLINK*)malloc(sizeof(RLINK));
link->head=NULL;
return link;
}
void addNode(RLINK* link,TNODE* tnode){
LNODE* lnode=(LNODE*)malloc(sizeof(LNODE));
lnode->curr=tnode;
lnode->next=link->head;
link->head=lnode;
}
void getChild(TNODE* father,int level,RLINK* link){
int father_level;
int child_level;
int i,j;
int flag;
TNODE* curr;
//
if(level==8){
addNode(link,father);
return ;
}
father_level=level;
child_level=father_level+1;



for(i=0;i<8;i++){
flag=1;
curr=father;
father->child[i]=(TNODE*)malloc(sizeof(TNODE));
father->child[i]->father=father;
father->child[i]->data=i;
for(j=0;j<father_level;j++){
if(curr->data==father->child[i]->data||
(abs(curr->data-father->child[i]->data)==abs(child_level-father_level+j))){
flag=flag*0;
}
curr=curr->father;
}
if(flag==1)
{
getChild(father->child[i],child_level,link);
}
}


}
void print(RLINK* link){
LNODE* curr;
int num;
int i,j;
TNODE* curr_t;


curr=link->head;
num=0;

while(curr){
curr_t=curr->curr;
for(i=0;i<8;i++){
for(j=0;j<curr_t->data;j++){
// printf("%d\t",curr_t->data);
printf("\t");
}
printf("(%d,%d)\n",i,curr_t->data);
curr_t=curr_t->father;

}
curr=curr->next;
num++;
printf("===============================================================================\n");

}
printf("sum=%d\n",num);

}
原创粉丝点击