当前位置:编程学习 > php >>

编程问题....

有五块地abcde, a 与 bcde 均相邻,b 与 ace 相邻,c 与 abd 相邻,d 与 ace 相邻,e 与 abd 相邻。有 5 种颜色的花可供选择,每块地只种一种花,相邻的土地种的花不能相同,求有多少种不同的种法。

需要将程序代码贴出,必须有必要的注释。

推荐语言:C,C++,C#,JAVA,PHP,Basic。
答案://用了回溯的方法,我待会写个5层循环的。

#include<stdio.h>

int visit[5];//表示5块地。0,1,2,3,4分别对应a,b,c,d,e
int total;//不同的种法

int check(int k,int s)//判断第k个块能否种第s个花
{
 //a的情况
 if(k==0)
 {
  //说明周围被人用过了。
  if(visit[1]==s||visit[2]==s||visit[3]==s||visit[4]==s)
   return 0;
 }
 //b的情况
 if(k==1)
 {
  if(visit[0]==s||visit[2]==s||visit[4]==s)
   return 0;
 }
 if(k==2)
 {
  if(visit[0]==s||visit[1]==s||visit[3]==s)
   return 0;
 }
 if(k==3)
 {
  if(visit[0]==s||visit[2]==s||visit[4]==s)
   return 0;
 }
 if(k==4)
 {
  if(visit[0]==s||visit[1]==s||visit[3]==s)
   return 0;
 }
 return 1;
}
void solve(int k)//循环处理第i个地的情况.
{
 if(k==6) {total++;return;}
 int i;
 //看k块地能否种第i种花
 for(i=1;i<=5;i++)
 {
  if(check(k,i)==1)
  {
   visit[k]=i;
   solve(k+1);
  }
 }
}

int main()
{
 int i;
 //初始化工作。
 total=0;
 for(i=0;i<5;i++) visit[i]=0;//标志没用上。
 solve(1);//从第一个地开始
 printf("%d\n",total);
 return 0;
}

上一个:新手问下PHP购物车如何实现 - 技术问答
下一个:在PHP网站编程中,我要给数据列表进行分页,蛋每次操作都要传nowpage,有没有方法不传参也行啊?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,