uva 10609 - Fractal(dfs)
来源:互联网 发布:linux arp s 编辑:程序博客网 时间:2024/05/18 00:47
题目链接:uva 10609 - Fractal
题目大意:给出A,B两个点的坐标,以及T,每次找到A、B的四等分点C,D,然后以AB/2为边长,C,D为顶点,构建一个等边三角形,E为另外一个顶点,然后再对C,E;E,D做同样的操作,直到构建的等边三角形的边长小于T时。输出所有过程中的点,按照x坐标排序,相同的按照y坐标。
解题思路:dfs模拟,用ans记录点,最后排序,C,D,E可以根据向量的方法从A,B得到。
#include <stdio.h>#include <string.h>#include <math.h>#include <vector>#include <algorithm>using namespace std;const double sq3 = sqrt(3.0);struct point {double x, y;};vector<point> ans;double T;bool cmp(const point& a, const point& b) {if (fabs(a.x - b.x) > 1e-6) return a.x < b.x;return a.y < b.y;}double dis(double x, double y) {return sqrt(x*x + y*y);}void dfs (point A, point B) {double len = dis(A.x - B.x, A.y - B.y);if (len / 2 < T) return;point C, D, E;C.x = B.x + 3 * (A.x-B.x) / 4;C.y = B.y + 3 * (A.y-B.y) / 4;D.x = B.x + (A.x-B.x) / 4;D.y = B.y + (A.y-B.y) / 4;E.x = (A.x+B.x)/2 + sq3/4*(A.y-B.y);E.y = (A.y+B.y)/2 - sq3/4*(A.x-B.x);ans.push_back(C);ans.push_back(D);ans.push_back(E);dfs(C, E);dfs(E, D);}int main () {int cas = 1;point A, B;while (scanf("%lf%lf%lf%lf%lf", &A.x, &A.y, &B.x, &B.y, &T) == 5 && T >= 1) {ans.clear();ans.push_back(A);ans.push_back(B);dfs(A, B);printf("Case %d:\n", cas++);sort(ans.begin(), ans.end(), cmp);printf("%lu\n", ans.size());for (int i = 0; i < ans.size(); i++) printf("%.5lf %.5lf\n", ans[i].x, ans[i].y);}return 0;}
1 0
- uva 10609 - Fractal(dfs)
- 10609 - Fractal (模拟,dfs)
- poj--2083--Fractal(dfs)
- POJ 2083 Fractal(dfs)
- poj Fractal 2083 (模拟&&dfs)
- poj 2083 Fractal (dfs 分形图)
- Fractal
- Fractal
- Fractal
- 【DFS】UVA
- 【DFS】UVA
- uva 784(dfs)
- dfs uva-297-Quadtrees
- UVA 10318 简单dfs
- uva 11218 KTV(DFS)
- uva 301 Transportation (DFS)
- UVA 185(暴力DFS)
- UVA 11218 - KTV DFS
- GL_PROJECTION和GL_MODELVIEW的作…
- Eclipse中的链接
- Framelayout
- 【转】match_parent和fill_parent…
- Android开发之常用代码片段【各种…
- uva 10609 - Fractal(dfs)
- javac的使用
- 我的博客今天3岁144天了,我领取了…
- eclipse自动排版快捷键、自动引入…
- Android记事
- 我的博客今天3岁147天了,我领取了…
- 【NDK】NDK资源读取(临时文…
- 悟透JavaScript(转)
- 程序