hdu1016

来源:互联网 发布:touch.js实现自由缩放 编辑:程序博客网 时间:2024/05/10 09:54
//这是一道很水的搜索题目,在这个题目面,我用的是栈  这种题目应该是非常简单的搜索  但是还是花了 我一些时间代码也写得不好  效率估计还挺低的
#include <stdio.h>#include <string.h>int b[1000];int a[1000];int top;void pushstack(int i){     b[++top]=i;}int popstack(){int k=b[top];top=top-1;return k;}int topstack(){//printf("%d\n",b[top]);return b[top];}int emptystack(){if(top==-1)return 1;elsereturn  0;}int sum(int i,int j){int sum1=i+j;for(i=2;i<=sum1/2;i++){if(sum1%i==0)return 0;}return 1;}void search1(int n){int i;for(i=1;i<=n;i++){        if(sum(i,topstack())==1&&a[i]==0){               pushstack(i);   a[i]=1;   search1(n);}}}void search(int st,int n){int i,k,flag=0;while(1){flag=0;    for(i=st;i<=n;i++)   { //printf("<<%d %d\n",i,topstack()); if(sum(i,topstack())==1&&a[i]==0) {pushstack(i);a[i]=1;search1(n);break; }   }     if(top==n-1){if(sum(b[top],1)==1){               for(i=0;i<top;i++)       printf("%d ",b[i]);          printf("%d\n",b[top]);  } }  k=popstack();  if(k==1)  {    break;  }  a[k]=0;      st=k+1;      for(i=st;i<=n;i++){ if(sum(i,topstack())==1&&a[i]==0) {pushstack(i);a[i]=1;st=1;flag=1;break; }   } if(flag==0) { st=n+1; }}return ;}int main(){int n;int i=1,j,k;while(scanf("%d",&n)!=EOF){printf("Case %d:\n",i);i++;top=-1;memset(a,0,sizeof(a));pushstack(1);a[1]=1;search(1,n);printf("\n");}return 0;}

0 0
原创粉丝点击