《数据结构》课程设计,包括约瑟夫环问题求解和八皇后问题求解两题。明天下午之前给我答案。。我给100分

来源:百度知道 编辑:UC知道 时间:2024/05/12 23:55:49
1. 约瑟夫环问题求解
【问题描述】
编号为1,2… n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。
【基本要求】
(1)利用单循环链表作为存储结构模拟此过程;
(2)键盘输入总人数、初始报数上限值m及各人密码;
(3)按照出列顺序输出各人的编号。
10. 八皇后问题求解
【问题描述】
在一个8×8的棋盘里放置8个皇后,要求每个皇后两两之间不相"冲"(在每一横列竖列斜列只有一个皇后)。
【问题分析】数组a、b、c分别用来标记冲突,a数组代表列冲突,从a[0]~a[7]代表第0列到第7列,如果某列上已经有皇后,则为1,否则为0;
数组b代表主对角线冲突,为b[i-j+7],即从b[0]~b[14],如果某条主对角线上已经有皇后,则为1,否则为0;
数组c代表从对角线冲突,为c[i+j],即从c[0]~c[14],如果某条从对角线上已经有皇后,则为1,否则为0;
【基本要求】
(1) 用递归算法实现
(2) 输出所有棋盘状态,其中空的地方为“*”,放置皇后的地方为“@”
多谢啊。。就两题。用C语言吧。。帮帮我啊。。。我中奖啊

约瑟夫环的答案是:
typedef struct node
{int num;
struct node *next;
} linklist;

linklist *creat(int n)
{linklist *s,*p,*head;
int i;
s=(linklist*)malloc(sizeof(linklist));
head=s;
s->num=1;
p=s;
for(i=2;i<=n;i++)
{s=(linklist*)malloc(sizeof(linklist));
s->num=i;
p->next=s;
p=s;
}
p->next=head;
return (head);
}
void slect(linklist *head,int m,int n)
{linklist *p,*q;
int i,t,k=1;
p=head;
t=1;
q=p;
do
{p=q->next;
t=t+1;
if(t%m==0)
{printf("%4d",p->num);
q->next=p->next;
k++;
free(p);
}
else q=p;
}while(k
}

void main()
{int n,m;
linklist *a,*head;
printf("Input the total number\n");
scanf("%d",&n);
printf("Input the number to call:\n");
scanf("%d",&m);
head=creat(n);
sl