利用深度优先算法向算法进军
基于深度优先算法完成初级算法题第一题六角填数如图所示六角形中填入1~12的数字。使得每条直线上的数字之和都相同。具体操作在代码里面写得很清楚#includestdio.hintt[13];intbook[13];voiddfs(intstep){inti;if(step13)//判断是否12个数字都已经填入{if((t[2]t[3]t[4]t[5])(t[1]t[3]t[6]t[8])(t[1]t[4]t[7]t[11])(t[8]t[9]t[10]t[11])(t[2]t[6]t[9]t[12])(t[5]t[7]t[10]t[12])){for(i1;i12;i)printf(%d ,t[i]);printf(\n);}return;}for(i1;i12;i){if(book[i]0){book[i]1;//标记这个数字已经填入了t[step]i;//填入该数字dfs(step1);//进入下一个圈中book[i]0;//取回填入的数字}}return;}intmain(void){dfs(1);getchar();getchar();return0;}第二题李白打酒话说大诗人李白一生好饮。幸好他从不开车。一天他提着酒壶从家里出来酒壶中有酒2斗。他边走边唱无事街上走提壶去打酒。逢店加一倍遇花喝一斗。这一路上他一共遇到店5次遇到花10次已知最后一次遇到的是花他正好把酒喝光了。请你计算李白遇到店和花的次序可以把遇店记为a遇花记为b。则babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢请你计算出所有可能方案的个数包含题目给出的。#includestdio.h#includestdlib.hchart[17],k[17];inta0,b0;//表示遇到店和花的次数inttotal0,step0;//total表示答案的总数step表示第多少次。voiddfs(inta,intb,intstep){if(a9b5)//判断遇到花和店的次数是否满足题意{puts(t);totalreturn;}if(a9)//递归{t[step]a;dfs(a1,b,step1);t[step]0;}if(b5)//递归{t[step]b;dfs(a,b1,step1);t[step]0;}return;}intmain(void){dfs(a,b,0);system(pause);return0;}第三题地宫取宝X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。地宫的入口在左上角出口在右下角。小明被带到地宫的入口国王要求他只能向右或向下行走。走过某个格子时如果那个格子中的宝贝价值比小明手中任意宝贝价值都大小明就可以拿起它当然也可以不拿。当小明走到出口时如果他手中的宝贝恰好是k件则这些宝贝就可以送给小明。请你帮小明算一算在给定的局面下他有多少种不同的行动方案能获得这k件宝贝。【数据格式】输入一行3个整数用空格分开n m k (1n,m50, 1k12)接下来有 n 行数据每行有 m 个整数 Ci (0Ci12)代表这个格子上的宝物的价值要求输出一个整数表示正好取k个宝贝的行动方案数。该数字可能很大输出它对 1000000007 取模的结果。在我这里没有对它取模的操作。例如输入2 3 21 2 32 1 5程序应该输出14这里这个程序有点问题它输出的是7但大概的过程应该是这样的欢迎各位大佬留言给点提示。#includestdio.h#includestdlib.hintt[51][51],;intb[51],k,n,m,num1;//b计入拿起的每个宝藏的价值intsum0;voiddfs(intx,inty){intnext[2][2]{{0,1},{1,0}};inti,tx,ty,j,flag0;inta;if(xnym){if(numk){sum;printf(%d\n,sum);}return;}for(i0;i2;i){txxnext[i][0];//向右走tyynext[i][1];//向下走if(txn||tym)//判断是否出界continue;for(j1;jnum;j)//判断是否可以拿起宝藏if(t[tx][ty]b[j])flag1;if(flag0)//如果可以{for(a0;a1;a){if(a0)//选择拿起该宝藏{num;b[num]t[tx][ty];dfs(tx,ty);b[num]0;num--;}else//选择不拿起宝藏{dfs(tx,ty);}}}else//不可以拿起宝藏{dfs(tx,ty);}}}intmain(void){inti,j;scanf_s(%d %d %d,n,m,k);for(i1;in;i)for(j1;jm;j)scanf_s(%d,t[i][j]);b[1]t[1][1];dfs(1,1);system(pause);}thank for your reading!!!