| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1158 人关注过本帖
标题:哪位高手帮我做做这些经典问题的变形问题?急用
只看楼主 加入收藏
天使爱雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-12-15
收藏
 问题点数:0 回复次数:13 
哪位高手帮我做做这些经典问题的变形问题?急用

第一题:希尔排序(shell)
希尔排序(shell)又称作“缩小增量排序”。其基本思想是:把记录按下标的一定增量分组,对每组记录使用直接插入排序。随着增量逐渐减小,所分成的组包含的记录越来越多,到增量的值减到1时,整个数据集合成为一组,完成排序。
在希尔排序中,不是简单地逐段分割来分组记录,而是将相隔某个“增量”的记录组成一组,构成一个子序列。当在组内进行直接插入排序时,记录的移动将是按“增量”值的倍数大幅度移动,比一步一步的挪动要高效得多。
基本过程: 首先选定一个严格递减序列 d1,d2, ... ,dt= 1
⑴ 比较以d1为距离的项,直到以d1为距离的记录排好序为止;
⑵ 从上述的结果序列出发,继续以 d2(d2<d1) 为距离的项进行排序;
⑶ 依次取每一个 di+1(di+1<di),重复⑵直到 dt = 1为止。
要求:
选取增量序列为:d0=n; di+1=[di/2]
从键盘输入10个整数
在屏幕上输出每一趟希尔排序的结果
例如:
input : 23 15 34 19 16 24 99 88 17 30
step 1: 23 15 34 17 16 24 99 88 19 30
step 2: 16 15 19 17 23 24 34 30 99 88
step 3: 15 16 17 19 23 24 30 34 88 99

第二题:N皇后问题
在n皇后问题中,我们希望在n×n的棋盘上找到一个n皇后的放置方法以便任意两个皇后之间不冲突。当且仅当两个皇后在相同的排、列、对角线或反对角线上时,她们之间将发生冲突。(数据结构不限,i,j在对角线或反对角线上时i+j=Cij;i-j+C=Aij;其中Cij和Aij为依赖与i,j的非负常数;通常采用回溯算法)。
要求:
只要求对8皇后问题求解
没有输入,在解决问题的前提下,尽可能考率时间和空间复杂性
在屏幕上输出8皇后问题的位置(放皇后为1,没放为0)
例如:输出格式为(注意例子中的结果并不对)
1 2 3 4 5 6 7 8
1 : 1 0 0 0 0 0 0 0
2 : 0 0 1 0 0 0 0 0
3 : 0 1 0 0 0 0 0 0
4 : 0 0 0 1 0 0 0 0
5 : 0 0 0 0 0 1 0 0
6 : 0 0 0 0 0 0 0 1
7 : 0 0 0 0 0 0 1 0
8 : 0 0 0 0 1 0 0 0
--------------------------------------------------------------------



搜索更多相关主题的帖子: 经典 
2005-12-15 13:06
zinking
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:35
帖 子:916
专家分:0
注 册:2004-12-5
收藏
得分:0 
都是老题目,可惜我也是不得要领阿。每一次有人问都答不上

找到代码贴给你 。等着阿。。。。。。。。

http://kongfuziandlife. http://codeanddesign.
2005-12-15 21:06
天使爱雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-12-15
收藏
得分:0 
恩!谢谢啦!

可是我需要完整的答案呢!而且和老问题是有很大不同的

我们老师太狠,把考研究生的题目拿来给我们做!
2005-12-15 21:55
天使爱雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-12-15
收藏
得分:0 
天哪~~~~~~~~~~~~~~~~~

江湖救急啊!!!

怎么还没有人帮我解答啊??

再没人来我就要挂了啊!!!!
2005-12-18 21:52
天使爱雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-12-15
收藏
得分:0 
天啊!!!

有没有人帮我回答啊

再没人帮助我我就要挂了,可是考试啊!!!!

2005-12-19 20:20
天使爱雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-12-15
收藏
得分:0 
我顶~~~~~~~~~~~~~~~~~~~~~~~~~~~

来个人帮帮我吧?

不然留句话也是个安慰啊~~~~
2005-12-20 21:22
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
八皇后
这个是我同学写的。 给你参考下吧
nxaEELMe.rar (13.47 KB) 哪位高手帮我做做这些经典问题的变形问题?急用



生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-12-21 08:58
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 

cpp文件里的
/****************************/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define QueenNumber 8
#include"Queen.h"

void main(void)
{
int a[QueenNumber][QueenNumber];
int flag; //用来标记是否成功找到皇后的位置,成功进栈为1,出栈为0
int j,i;
int ii,iii;
int x,y;
int temp_i=0,temp_j=1;//,temp=-1;
int n=0,num;
QueenType *head;

//初始化皇后的链栈
QueenStackInitiate(&head);

//给数组a[j][i]赋值
for(j=0;j<QueenNumber;j++)
{
for(i=0;i<QueenNumber;i++)
{
a[j][i]=0;
}
}


for(ii=0;ii<QueenNumber;ii++)
{
if(QueenStackPush(head,0,ii))
{
//printf("(第0行第%d列元素)\n进栈成功\n",ii);
}
else
{
//printf("进栈失败\n");
return;
}
a[0][ii]=1;
flag=1;

loop1:
for(j=temp_j;j<QueenNumber;j++)
{
for(i=temp_i;i<QueenNumber;i++)
{
if(QueenIsHere(head,j,i))
{
//printf("成功找到位置:x=%d,y=%d\n",j,i);
if(QueenStackPush(head,j,i))
{
// printf("进栈成功\n");
a[j][i]=1;
}
else
{
//printf("进栈失败\n");
return;
}
//a[j][i]=1;
}
}
StackSee(head); //用于检测
for(iii=0;iii<QueenNumber;iii++)
{
if(a[j][iii]!=0)
{
flag=1;
iii=QueenNumber;
}
else
flag=0;
}

if(flag==0)
{
if(QueenStackPop(head,&x,&y))
{
//printf("出栈成功:x=%d,y=%d\n",x,y);
}
else
{
//printf("出栈失败\n");
return;
}
a[x][y]=0;

if(x==1&&y==7)//此处保险作用,可要可不要
{
temp_i=0;
goto loop2;
}

temp_j=x;
temp_i=y+1;
goto loop1;
}
else
{
temp_i=0;
}
}
See(a,++n);



printf("根据皇后1变化输入行号(第1,第2'''第7),进入该行循环;\n输入0进入第0行循环\n");
printf("或每次只输入7,即可得所有的皇后位置\n");
scanf("%d",&num);
//num=7;
if(num!=0)
{
find(head,&temp_j,&temp_i,num,a);
goto loop1;

}


loop2:
//temp++;
//a[0][temp]=0;
while(head->next!=NULL)
{
if(QueenStackPop(head,&x,&y))
{
//printf("出栈,清空x=%d;y=%d\n",x,y);
}
}
for(j=0;j<QueenNumber;j++)
{
for(i=0;i<QueenNumber;i++)
{
a[j][i]=0;
}
}
temp_j=1;

}

}

/**************************/
.h文件里的
/******************************/


typedef struct queen
{
int row;
int col;
struct queen * next;
}QueenType;
//初始化皇后的链栈
void QueenStackInitiate(QueenType **head)
{
if((*head=(QueenType *)malloc(sizeof(QueenType)))==NULL)
exit(1);
else
(*head)->next=NULL;
}


//入栈,成功,返回1;失败,返回0。
int QueenStackPush(QueenType *head,int x,int y)//x代表行,y代表列
{
QueenType *p;
if((p=(QueenType *)malloc(sizeof(QueenType)))==NULL)
{
//printf("内存不够,无法产生新结点,进行插入\n");
return 0;
}
else
{
p->row=x;
p->col=y;
p->next=head->next;
head->next=p;
return 1;
}
}

//出栈,成功,返回1;失败,返回0。
int QueenStackPop(QueenType *head,int *x,int *y)//x代表行,y代表列
{
QueenType *p=head->next;
if(p==NULL)
{
//printf("堆栈已空,出错\n");
return 0;
}
else
{
head->next=p->next;
*x=p->row;
*y=p->col;
free(p);
return 1;
}
}

//判断堆栈是否空,空返回0;非空返回1。
int QueenStackEmpty(QueenType *head)
{
if(head->next==NULL)
return 0;
else
return 1;
}

//取栈顶数据元素x,y;成功,返回1;失败,返回0。
int QueenStackTop(QueenType *head,int *xx_temp,int *yy_temp)
{
QueenType *p=head->next;
if(p==NULL)
{
//printf("堆栈已空,出错\n");
return 0;
}
else
{
*xx_temp=p->row;
*yy_temp=p->col;
return 1;
}
}

//取栈顶数据行元素x;成功,返回1;失败,返回0。
int QueenStackTopRow(QueenType *head,int *x)
{
QueenType *p=head->next;
if(p==NULL)
{
//printf("堆栈已空,出错\n");
return 0;
}
else
{
*x=p->row;
return 1;
}
}

//取栈顶数据列元素y;成功,返回1;失败,返回0。
int QueenStackTopCol(QueenType *head,int *y)
{
QueenType *p=head->next;
if(p==NULL)
{
//printf("堆栈已空,出错\n");
return 0;
}
else
{
*y=p->col;
return 1;
}
}

//撤销动态申请空间
void QueenDestory(QueenType *head)
{
QueenType *p,*pTemp;
p=head;
while(p!=NULL)
{
pTemp=p;
p=p->next;
free(pTemp);
}
}

//----------------------------------------------------------------
//判断第i列位置有无皇后,有返回1,无返回0;
int QueenIsCol(QueenType *head,int i)
{
QueenType *p=head->next;
while(p!=NULL)
{
if(p->col==i)
{
//printf("有列位置上的值:y=%d\n",p->col);
return 1;
}
else
p=p->next;
}
return 0;
}

//判断第j行位置有无皇后,有返回1,无返回0;
int QueenIsRow(QueenType *head,int j)
{
QueenType *p=head->next;
while(p!=NULL)
{
if(p->row==j)
{
//printf("有行位置上的值:x=%d\n",p->row);
return 1;
}
else
p=p->next;
}
return 0;
}

//判断正斜位置有无皇后,有返回1,无返回0;
int QueenIsSkew(QueenType *head,int j,int i)
{
QueenType *p=head->next;
for(--j,++i;j>=0&&i<QueenNumber;--j,++i)//逐个给出正斜上的值 
{
while(p!=NULL)
{
if(p->row==j&&p->col==i) //判断堆栈中有无正斜上的值
{
//printf("有正斜上的值:x=%d,y=%d\n",p->row,p->col);
return 1;
}
else
p=p->next;
}
p=head->next;
}
return 0;
}

//判断反斜位置有无皇后,有返回1,无返回0;
int QueenIsUnskew(QueenType *head,int j,int i)
{
QueenType *p=head->next; //逐个给出反斜上的值
for(--j,--i;j>=0&&i>=0;--j,--i)
{
while(p!=NULL)
{
if(p->row==j&&p->col==i)//判断堆栈中有无反斜上的值
{
//printf("有反斜上的值:x=%d,y=%d\n",p->row,p->col);
return 1;
}
else
p=p->next;
}
p=head->next;
}
return 0;
}


//判断皇后是否可以在这个位置,可以返回1,不可以返回0
int QueenIsHere(QueenType *head,int j,int i)
{
if(QueenIsCol(head,i)==1)
return 0;
else if(QueenIsRow(head,j)==1)
return 0;
else if(QueenIsSkew(head,j,i)==1)
return 0;
else if(QueenIsUnskew(head,j,i)==1)
return 0;
else
return 1;
}

//显示
void See(int a_temp[QueenNumber][QueenNumber],int n)
{
printf("第%d种方法\n",n);
for(int j=0;j<QueenNumber;j++)
{//printf("显示\n");
for(int i=0;i<QueenNumber;i++)
printf("%d ",a_temp[j][i]);
printf("\n");
}
}

//
void find(QueenType *head,int *Ftemp_j,int *Ftemp_i,int F_n,int temp_a[QueenNumber][QueenNumber])
{
int F_x,F_y;
while(head->next->row >=F_n)
if(QueenStackPop(head,&F_x,&F_y))
{
temp_a[F_x][F_y]=0;
//printf("find出栈成功\n");
}
*Ftemp_j=F_x;
*Ftemp_i=F_y+1;

}

//看链栈的数据元素
void StackSee(QueenType *head)
{
QueenType *p;
p=head->next;
while(p!=NULL)
{
printf("r=%d,c=%d; ",p->row,p->col);
p=p->next;
}
printf("\n");

}
///////////////////不可以//////////////////


生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-12-21 08:59
天使爱雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-12-15
收藏
得分:0 


非常感谢你和你的朋友!


帮了我非常大的忙,我很感激呢!

可是还有希尔排序(shell)呢??也急用哦!!



再帮帮我吧?小女子不胜感激
2005-12-21 20:59
天使爱雨
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2005-12-15
收藏
得分:0 


救命啊~~~~~~~~~~~~``
2005-12-23 17:01
快速回复:哪位高手帮我做做这些经典问题的变形问题?急用
数据加载中...
 
   



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

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