| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 801 人关注过本帖
标题:关于皇后问题的核心数据用到的结构体要采用动态内存分配和链表结构
取消只看楼主 加入收藏
卢露露
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-9-13
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:5 
关于皇后问题的核心数据用到的结构体要采用动态内存分配和链表结构
核心数据结构用到的结构体要采用动态内存分配和链表结构,求思路!有数组形式的、、能直接把它转换成标题要求的那样吗
搜索更多相关主题的帖子: 内存 数据 结构体 动态 
2012-04-09 10:52
卢露露
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-9-13
收藏
得分:0 
#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);
}
  
这是我的程序,链表创建了,但是核心数据用的还是数组,不知咋用啊?各位高手看看啦~~~
2012-04-09 10:59
卢露露
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-9-13
收藏
得分:0 
回复 4楼 寒风中的细雨
程序应具有以下基本功能:
(1)输入棋盘规模N;  
(2)采用回逆法计算皇后位置;
(3)以棋盘的形式显示皇后位置。

设计要求设计要求设计要求设计要求:
1.核心数据结构用到的结构体要采用动态内存分配和链表结构。
2.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用
接口要注释清楚。对程序其它部分也进行必要的注释。
2012-04-09 15:34
卢露露
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-9-13
收藏
得分:0 
回复 4楼 寒风中的细雨
帮帮啦~~~·老大
2012-04-10 21:45
卢露露
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-9-13
收藏
得分:0 
回复 7楼 寒风中的细雨
该死的课程设计 非要用链表
2012-04-11 16:33
卢露露
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2011-9-13
收藏
得分:0 
回复 9楼 寒风中的细雨
真厉害 ,好佩服哦
2012-04-12 09:24
快速回复:关于皇后问题的核心数据用到的结构体要采用动态内存分配和链表结构
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033984 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved