经典的递归程序设计中的2到题目
1、八皇后问题
国际象棋棋盘走法,用递归实现所有的可能性;
棋盘:
(1)、代码如下:
#include<stdio.h> typedef unsigned char boolean; #define TRUE 1 #define FALSE 0 #define EIGHT 8 void showChess(int (*chess)[EIGHT]); //显示棋盘 boolean isSafe(int (*chess)[EIGHT], int row, int col); //判断这个位置是否安全 void eightQueen(int (*chess)[EIGHT], int row); //八皇后的递归程序 void eightQueen(int (*chess)[EIGHT], int row){ int colIndex; if(row >= EIGHT){ showChess(chess); }else{ for(colIndex = 0; colIndex < EIGHT; colIndex++){ if(isSafe(chess, row, colIndex) == TRUE){ chess[row][colIndex] = 1; eightQueen(chess, row+1); chess[row][colIndex] = 0; } } } } boolean isSafe(int (*chess)[EIGHT], int row, int col){ int rowIndex; int colIndex; for(rowIndex = row-1; rowIndex >= 0; rowIndex--){ if(chess[rowIndex][col] == 1){ return FALSE; } } for(rowIndex = row-1, colIndex = col-1; rowIndex >= 0 && colIndex >= 0; rowIndex--, colIndex--){ if(chess[rowIndex][colIndex] == 1){ return FALSE; } } for(rowIndex = row-1, colIndex = col+1; rowIndex >= 0 && colIndex < EIGHT; rowIndex--, colIndex++){ if(chess[rowIndex][colIndex] == 1){ return FALSE; } } return TRUE; } void showChess(int (*chess)[EIGHT]){ int i; int j; int static count; printf("解:%d\n", ++count); for(i = 0; i < EIGHT; i++){ for(j = 0; j < EIGHT; j++){ printf("%4d ", chess[i][j]); } printf("\n"); } } void main(void){ int chess[EIGHT][EIGHT] = {0}; eightQueen(chess, 0); }
(2)、运行结果:
因为4个方向,每一个方向都有23种解法!!!
2、全排列问题
从n个数据中挑选m个数据,每个数据只能取一次,输出其全部组合的可能性;
(1)、代码如下:
#include<stdio.h> #include<string.h> void fullArray(char *sourceStr, int sourceLen, int *used, int i, char *resStr, int count); void fullArray(char *sourceStr, int sourceLen, int *used, int i, char *resStr, int count){ int index; if(i >= count){ printf("%s\n", resStr); }else{ for(index = 0; index < sourceLen; index++){ if(used[index] == 0){ resStr[i] = sourceStr[index]; used[index] = 1; fullArray(sourceStr, sourceLen, used, i+1, resStr, count); used[index] = 0; } } } } void main(void){ char sourceStr[80]; int used[80] = {0}; char resStr[80] = {0}; int count; printf("请输入字符串: "); gets(sourceStr); printf("请问要几个进行全排列? "); scanf("%d", &count); fullArray(sourceStr, strlen(sourceStr), used, 0, resStr, count); }
(2)、运行结果:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:八皇后和全排列-创新互联
文章出自:https://www.cdcxhl.com/article2/dpgsoc.html
成都网站建设公司_创新互联,为您提供微信公众号、微信小程序、网站维护、Google、虚拟主机、企业建站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联