挑戰程式設計競賽 演算法和資料結構 第6章 遞迴和分治法
阿新 • • 發佈:2018-12-30
仿照上述程式碼,本人編寫的C語言AC程式碼如下:
//ALDS1_5_C:Koch Curve
//2一個很致命的問題,將遞迴中的 s,t;區域性變數寫成全域性變數
//深刻感覺遞迴,還需要時間的積累。2017-9-29 AC
#include <stdio.h>
#include <math.h>
struct Point{
double x,y;
}p1,p2;//2寫成 p1,p2,s,t;
int n;
void koch(int step,struct Point a,struct Point b){
double th=M_PI*60/180;//弧度形式的60度
struct Point s,u,t;//2一個很致命的問題,將遞迴中的 s,t;區域性變數寫成全域性變數
if(step==0)return;
s.x=(2*a.x+b.x)/3;
s.y=(2*a.y+b.y)/3;
t.x=(a.x+2*b.x)/3;
t.y=(a.y+2*b.y)/3;
u.x=(t.x-s.x)*cos(th)-(t.y-s.y)*sin(th)+s.x;
u.y=(t.x-s.x)*sin(th)+(t.y-s.y)*cos(th)+s.y;
koch(step-1,a,s);//1 此處寫成 koch(n-1,a,s);
printf("%.8f %.8f\n",s.x,s.y);
koch(step-1,s,u);//1 此處寫成 koch(n-1,s,u);
printf("%.8f %.8f\n",u.x,u.y);
koch(step-1,u,t);//1 此處寫成 koch(n-1,u,t);
printf("%.8f %.8f\n",t.x,t.y);
koch(step-1,t,b);//1 此處寫成 koch(n-1,t,b);
}
int main(){
p1.x=0,p1.y=0;
p2.x=100,p2.y=0;
scanf("%d",&n);
printf("%.8f %.8f\n",p1.x,p1.y);
koch(n,p1,p2);
printf("%.8f %.8f\n",p2.x,p2.y);
return 0;
}
2017-9-29 AC該章節
//ALDS1_5_C:Koch Curve
//2一個很致命的問題,將遞迴中的 s,t;區域性變數寫成全域性變數
//深刻感覺遞迴,還需要時間的積累。2017-9-29 AC
#include <stdio.h>
#include <math.h>
struct Point{
double x,y;
}p1,p2;//2寫成 p1,p2,s,t;
int n;
void koch(int step,struct Point a,struct Point b){
double th=M_PI*60/180;//弧度形式的60度
struct Point s,u,t;//2一個很致命的問題,將遞迴中的 s,t;區域性變數寫成全域性變數
if(step==0)return;
s.x=(2*a.x+b.x)/3;
s.y=(2*a.y+b.y)/3;
t.x=(a.x+2*b.x)/3;
t.y=(a.y+2*b.y)/3;
u.x=(t.x-s.x)*cos(th)-(t.y-s.y)*sin(th)+s.x;
u.y=(t.x-s.x)*sin(th)+(t.y-s.y)*cos(th)+s.y;
koch(step-1,a,s);//1 此處寫成 koch(n-1,a,s);
printf("%.8f %.8f\n",s.x,s.y);
koch(step-1,s,u);//1 此處寫成 koch(n-1,s,u);
printf("%.8f %.8f\n",u.x,u.y);
koch(step-1,u,t);//1 此處寫成 koch(n-1,u,t);
printf("%.8f %.8f\n",t.x,t.y);
koch(step-1,t,b);//1 此處寫成 koch(n-1,t,b);
}
int main(){
p1.x=0,p1.y=0;
p2.x=100,p2.y=0;
scanf("%d",&n);
printf("%.8f %.8f\n",p1.x,p1.y);
koch(n,p1,p2);
printf("%.8f %.8f\n",p2.x,p2.y);
return 0;
}
2017-9-29 AC該章節