10.生命游戏#include <stdio.h>#include <stdlib.h>#define MAXSIZE 50 /* board size */#define OCCUPIED 1 /* occupied flag */#define UNOCCUPIED 0#define YES 1#define NO 0char cell[MAXSIZE][MAXSIZE]; /* the board */char workcopy[MAXSIZE][MAXSIZE]; /* a working copy */int row; /* No. of rows you want */i...
9.非递归河内之塔问题#include <stdio.h>#include <stdlib.h>#define MAX_DISK 31int which_disk(unsigned long *);void main(void){int number_of_disk; /* the number of disks */int pin[MAX_DISK+1]; /* locations of disks */int dir[2]; /* directions; 0=pos,1=neg */int disk; /* disk to be moved */int next; /* next...
8.一笔画问题#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20#define ALWAYS 1#define YES 1#define NO 0#define SUCCESS 1#define FAIL -1/* ------------------------------------------------------ *//* types and external variables *//* ------------------------------------------------------ */typede...
7.环游世界问题#include <stdio.h>#define MAXSIZE 30 /* no more than 30 vertices */#define ALWAYS 1#define SUCCESS 1#define FAILURE 0#define YES 1#define NO 0/* ------------------------------------------------------ *//* FUNCTION read_in : *//* Read in the number of vertices and the edges. Then *//* bu...
6.武士巡逻问题#include <stdio.h>#include <stdlib.h>#define MAXSIZE 10 /* max. board size */#define MAX_STACK 100 /* stack size = board-size^2*/#define SUCCESS 1 /* return value for a succ. */#define FAILURE 0 /* for a failure. */#define EMPTY -1 /* value to indicate empty *//* ----------------- exter...
5.八皇后问题递归解#include <stdio.h>#include <stdlib.h>
#define MAXSIZE 20 /* max. board size */#define DIAG_SIZE 39 /* max. # of diagonals */#define OCCUPIED 0 #define EMPTY 1
void initial(void);void display(void);void try(int);
int pos[MAXSIZE+1]; /* pos[j]=i means Q is (i,j)*/int in_row[MAXSIZE+1...
4.八皇后问题公式解#include <stdio.h>#include <stdlib.h>
#define MAXSIZE 30#define MARK 'Q'
void initial(void);void display(void);void class_1(void);void class_2(void);void class_3(void);void class_4(void);
int n; /* input board size */char board[MAXSIZE+1][MAXSIZE+1]; /* the chess board */
void mai...
经典游戏问题算法集
1.奇数阶魔方阵#include <stdio.h>#include <stdlib.h>
#define MAXSIZE 20
void main(void){int matrix[MAXSIZE][MAXSIZE]; /* the magic square */int count; /* 1..n*n counting */int row; /* row index */int column; /* column index */int order; /* input order */char line[100];
printf("\nOdd Orde...
[原创]智力拼图问题演示算法
/*智力拼图问题:将一个6*8的矩阵模块,划分成n个小模块,设计一个算法,用这n个小模块再重新拼接成原6*8矩阵,要求给出所有的可行方案。
本函数是演示程序,程序最多可以将6*8大小的矩阵分成15个模块,每个小模块的大小不能超过4*4大。并允许手动编辑。该程序计算所有的可行方案并显示出组合拼接的所有结果。本程序在初始的时候已经给了一个11模块的划分形式,要演示按回车即可。
backup函数是本程序的核心函数,该函数采用标准的递归回溯算法,算法的基本思想是:从左到右,从上到下扫描6*8矩阵,如果发现某个位置为空(用0表示)就依次尝试每一个还没有用...
[经典算法] 八皇后问题,回溯算法模拟出全部结果八皇后问题 这是本人在读大学时的一个作业,不知道现在还有没有人做这个题目!拿出来分享一下! 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。 对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象、更生动,使...
#include<iostream>using namespace std;int board[8] = {0,0,0,0,0,0,0,0};void print_board();int illegal(int);void eight_queen(int);int main(){ eight_queen(0); return 1;}void eight_queen(int i){ if (i >= 8) print_board(); else { for (int j=0; j<8; j++) { ...
八皇后的另一种解法 最近在这里的论坛看到了一个八皇后的问题,此题本人觉得这个题目是一种典型的递归算法这个算法用一维数组就可以实现了,把数组的每个下标对应一个皇后所在的列位置,这样就可以排除了各个皇后在同一列的可能,此题的思维是这样的,先在queue[0]位置放皇后 看这个数组的值是多少 就是在0列的第几行放皇后 最后输出的时候转化成二维数组就可以了,最后要判断 每个皇后不能再同一行 也不能在同一对角线就可以了,要说其具体的思想 真的很难说,还是把代码贴上来给你们看看好了:#include <stdio.h>#include <conio.h>#define TRUE 1#defi...
非栈和队列#include<iostream.h>void Output(int NowOut, int Track, int& Last){ //将车厢NowOut 从缓冲铁轨移动到出轨,并修改Lastcout<< "Move car " << NowOut << " from holding track " << Track << " to output" << endl;if (NowOut == Last) Last = 0;}bool Hold(int c, int last[], int track[], int k){ //把车厢c 移动到缓冲铁轨中// 如果没...
用栈写的啊 #include<iostream.h>#include<string.h>#include<stdlib.h>#define stacksize 100#define MaxLength 100const N=100;struct seqstack{ int data[stacksize];int top;};void Initial(seqstack *s){s->top=-1;}int Isempty(seqstack *s){return s->top==-1;}int Isfull(seqstack *s){return int(s->top==stacksize-...
用队列写的啊#include<iostream.h>const N=100;template <class T>struct Node{T data;Node<T> *next; //此处<T>也可以省略};
template <class T>class LinkQueue{public:LinkQueue( ); //构造函数,初始化一个空的链队列~LinkQueue( ); //析构函数,释放链队列中各结点的存储空间void EnQueue(T x); //将元素x入队T DeQueue( ); //将队头元素出队T GetQueue( ); //取链队列的队头元素bool ...
算法程序设计题~~高手帮忙啊~~~请高手看看下面的程序怎么写呢,我是新手,请多多关照!程序名: algo9-1.cpp根据输入的长度为10的无序关键字序列,先进行快速排序(升序),再用折半查找算法循环查找某一关键字的元素,直到按“#”号退出循环。 输入:10个关键字序列 输出:进行快速排序的过程(如下图所示) 循环输入:某一关键字k 循环输出:k在有序序列中的位置。 例如关键字序列为{6,8,7,9,0,1,3,2,4,5}。采用快速排序方法进行排序的过程如下: 排序前:6 8 7 9 0 1 3 2 4 5 5 4 ...
矩阵连乘 计算最优值void MatrixChain(int *p,int n,int**m,int **s){ for(int i=1;i<=n;i++) m[i][i]=0; for(int r=2;r<=n;r++) for(int i=1;i<=n-r+1;i++) { int j=i+r-1; m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; s[i][j]=i; for(int k=i+1;k<j;k++) ...
多数组相成
#include <iostream>using namespace std;struct list{int coef; //系数int exp; //指数list *next;};list *Creat(); //创建带头结点的链表void Display(list *h); //输出链表list *Merge(list *h1); //合并同类项list *Multiply(list *h1,list *h2); //实现两个链表相乘int main(){list *h1,*h2;h1=Creat();Display(h1);h2=Creat();Display(h2)...
若数组a中的n个元素已按升序排列,现将一个新数x插入到数组a中,插入后数组a的元素仍然保持升序。使用的插入排序算法是:从数组a的最后个元素开始,依次向前扫描数组元素,若a[i]大于x,则将a[i]放入a[i+1](后移一个位置),并继续向前扫描,直到找到某个a[i]小于或等于x,将x赋值到a[i+1]元素中,此时完成插入排序工作。编写程序时,要考虑初始时数组是空数组(即数组中没有元素),插入第一个元素时,要作特殊处理。试建立一个类InsSort,完成插入排序工作。具体要求如下:(1)私有数据成员。●int n:数组实际元素的个数。●int a[100]:存放排好序的整型序列。(2)公有成...
#include<iostream>
using namespace std;
void kemu(int n)
{
if(n == 1) cout<<"C++语言: ";
else if(n == 2) cout<<"数据结构: ";
else if(n == 3) cout<<"英语: ";
else cout<<"数字电子技术: ";
}
//成绩最高的学生----------------------
void hscore(float b[][4])
{
float c = b[0][0];
for(int i ...