|
|
#2
卢露露2012-04-09 10:59
#include<stdio.h>#include<malloc.h> #include<math.h> #define N 4 typedef int Datatype; typedef struct Node { Datatype data; struct Node*next; }LNode,*LinkList; #define flag -1 void Create_LinkList1(LinkList L) { LNode*s; Datatype x; scanf("%d",&x); while(x!=flag) { s=(LinkList)malloc(sizeof(LNode)); s->data=x; s->next=L->next; L->next=s; scanf("%d",&x); } } /* 所有可能的数目 */ int result; /* 保存结果的一个解,q[i] 是第i行皇后的位置 */ int q[N]; void queen(); int search(int i); void init(int index); void printresult(); /* 查找第i行皇后的位置,查找到返回1,否则返回0, 将被保存在q[i]中*/ int search(int i) { int m,n; int conflict; /* 搜索后以前的位置为: q[i]+1 */ for (m = q[i] + 1 ; m < N; m++) { conflict = 0; /* compare with prevois i-1 lines */ for (n = 0; n < i ; n++) { /* 找到冲突 */ if (m == q[n] || abs(m - q[n]) == abs(i - n)) { conflict = 1; break; } } /* 在第i行找到一个皇后 */ if (conflict == 0) { q[i]=m; return 1; } } return 0; } void queen() { int i; int number; result = 0; number = 0; for (i = 0; i < N; i++) { if (i == 0) { init(1); /* 在第0行重置皇后的位置 */ q[0] = number - 1; /* have find all the result */ if (number == N ) { break; } number++; } /*第i行没找到位置,所以必须追溯 */ if (search(i) == 0) { init(i); i = i - 2; continue; } /* 找到一个解决方案,输出结果并追踪 */ if (i == N-1) { printresult(); init(i); i = i -2; } } printf("The result is:%d\n", result); } /* 回溯后, 索引到q的元素要重置 */ void init(int index) { int i; for (i = index; i < N; i++) { q[i] = -1; } } /* 输出一个结果 */ void printresult() { int i,j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (q[i] == j) { printf("1 "); } else { printf("0 "); } } printf("\n"); } result++; printf("************************\n"); } int main(int argc, char * argv[]) { queen(); return 1; LinkList L; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; Create_LinkList1(L); } 这是我的程序,链表创建了,但是核心数据用的还是数组,不知咋用啊?各位高手看看啦~~~ |
核心数据结构用到的结构体要采用动态内存分配和链表结构,求思路!有数组形式的、、能直接把它转换成标题要求的那样吗
#include<stdio.h>
程序代码:
还以为你早就好了
该死的课程设计 非要用链表