成长轨迹57 【ACM算法之路 百炼poj.grids.cn】【递归】【2754、2816、2753、】
2754:八皇后
1 #include <stdio.h>
2
3 int ans[92][8],temp[8],num;
4 void deal(int i)
5 {
6 if(i==8)
7 {
8 for(int k=0;k<8;k++)
9 ans[num][k]=temp[k];
10 num++;
11 return;
12 }
13 for(int j=0;j<8;j++)
14 {
15 int k;
16 for(k=0;k<i;k++)
17 {
18 if(temp[k]==j||k-i==temp[k]-j||i-k==temp[k]-j)
19 break;
20 }
21 if(k==i)
22 {
23 temp[i]=j;
24 deal(i+1);
25 }
26 }
27 }
28
29 int main()
30 {
31 int n;
32 scanf("%d",&n);
33 num=0;
34 deal(0);
35 for(int i=0;i<n;i++)
36 {
37 int a;
38 scanf("%d",&a);
39 for(int j=0;j<8;j++)
40 printf("%d",ans[a-1][j]+1);//【不然会出来0】
41 printf("\n");
42 }
43 return 0;
44 }
2816:红与黑
1 #include <stdio.h>
2
3 int w,h;
4 char area[21][21];
5 int deal(int x,int y)
6 {
7 if(x<0||x>=w||y<0||y>=h)
8 return 0;
9 else if(area[x][y]=='#')
10 return 0;
11 else
12 {
13 area[x][y]='#';
14 return 1+deal(x-1,y)+deal(x+1,y)+deal(x,y-1)+deal(x,y+1);
15 }
16 }
17
18 int main()
19 {
20 while(scanf("%d %d",&h,&w),w!=0&&h!=0)//【注意这里的wh的顺序】
21 {
22 int nx=0,ny=0;
23 for(int i=0;i<w;i++)
24 {
25 for(int j=0;j<h;j++)
26 {
27 char c;
28 scanf("%c",&c);
29 if(c!='\n'&&c!='\0'&&c!=' ')
30 area[i][j]=c;
31 else
32 j--;
33 if(area[i][j]=='@')
34 {
35 nx=i;
36 ny=j;
37 }
38 }
39 }
40 printf("%d\n",deal(nx,ny));
41
42 }
43 return 0;
44 }
2753:菲波那契数列
1 #include <stdio.h>
2
3 int deal(int a)
4 {
5 if(a==1||a==2)
6 return 1;
7 return deal(a-1)+deal(a-2);
8 }
9
10 int main()
11 {
12 int n;
13 scanf("%d",&n);
14 for(int i=0;i<n;i++)
15 {
16 int a;
17 scanf("%d",&a);
18 printf("%d\n",deal(a));
19 }
20 return 0;
21 }