Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:求测试数据,自己做了几组测试数据和题目中的都测试过了,但是还是WA

Posted by wangchao at 2007-05-01 19:03:53 on Problem 1127
In Reply To:求测试数据,自己做了几组测试数据和题目中的都测试过了,但是还是WA Posted by:wangchao at 2007-05-01 19:03:23
附代码:

#include <stdio.h>
#include <string.h>

#define MIN(x, y)       ((x) < (y)) ? (x) : (y)
#define MAX(x, y)       ((x) > (y)) ? (x) : (y)
#define GT(x, y)        ((x) > (y)) ? 1 : 0

int L, line[128][4];
unsigned char used[128][128], conn[128][128], bad[128];

int try_cross(int t1, int t2)
{
        double  v1 ,v2 ,v3, v4;

        if(GT(MIN(line[t1][0], line[t1][2]), MAX(line[t2][0], line[t2][2]))
                || GT(MIN(line[t1][1], line[t1][3]), MAX(line[t2][1], line[t2][3]))
                || GT(MIN(line[t2][0], line[t2][2]), MAX(line[t1][0], line[t1][2]))
                || GT(MIN(line[t2][1], line[t2][3]), MAX(line[t1][1], line[t1][3])))
                return(0);

        v1 = ((double)line[t1][2] - line[t1][0]) * (line[t2][3] - line[t1][1]) - (line[t1][3] - line[t1][1]) * (line[t2][2] - line[t1][0]);
        v2 = ((double)line[t1][2] - line[t1][0]) * (line[t2][1] - line[t1][1]) - (line[t1][3] - line[t1][1]) * (line[t2][0] - line[t1][0]);

        if(v1 * v2 > 0)
                return(0);

        v3 = ((double)line[t2][2] - line[t2][0]) * (line[t1][3] - line[t2][1]) - (line[t2][3] - line[t2][1]) * (line[t1][2] - line[t2][0]);
        v4 = ((double)line[t2][2] - line[t2][0]) * (line[t1][1] - line[t2][1]) - (line[t2][3] - line[t2][1]) * (line[t1][0] - line[t2][0]);

        if(v3 * v4 > 0)
                return(0);

        conn[t1][t2] = 1;
        conn[t2][t1] = 1;

        return 1;
}

int try_conn(int t1, int t2) {
        int     i;

        if(conn[t1][t2] == 1 || try_cross(t1, t2))
                return(1);

        if(bad[t1])
                return(0);

        for(i = 1, bad[t1] = 1; i <= L; i++) {
                if(i == t1 || i == t2 || bad[i])
                        continue;

                if(used[t1][i] == 0 && try_cross(i, t1)) {
                        bad[t1] = 0;
                        used[t1][i] = 1;
                        used[i][t1] = 1;

                        if(conn[i][t2] == 1 || try_conn(i, t2)) {
                                conn[i][t2] = 1;
                                conn[t2][i] = 1;
                                return(1);
                        }

                        used[t1][i] = 0;
                        used[i][t1] = 0;
                }
        }

        return(0);
}

int main() {
        int     i, t1, t2;

        while(scanf("%d", &L)) {
                if(L < 1)
                        break;

                for(i = 1; i <= L && scanf("%d %d %d %d", &line[i][0], &line[i][1], &line[i][2], &line[i][3]); i++);

                memset(conn, 0, sizeof(conn));
                memset(bad, 0, sizeof(bad));

                while(scanf("%d %d", &t1, &t2)) {
                        if(t1 < 1)
                                break;

                        memset(used, 0, sizeof(used));

                        if(t1 == t2 || try_conn(t1, t2))
                                printf("CONNECTED\n");
                        else
                                printf("NOT CONNECTED\n");

                }
        }
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator