关于皇后问题的核心数据用到的结构体要采用动态内存分配和链表结构
核心数据结构用到的结构体要采用动态内存分配和链表结构,求思路!有数组形式的、、能直接把它转换成标题要求的那样吗
#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);
}
这是我的程序,链表创建了,但是核心数据用的还是数组,不知咋用啊?各位高手看看啦~~~