[Login|Register]
New post

Show post

Search forum

Read post
为什么是wrong,而不是超时,哪里错了? [ Topic ] 2009-09-09 16:49:06 team714
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
#define MN 25
int A[MN][MN], B[MN][MN], ia[MN], ib[MN];

int V, E, x[MN];
char used[MN];

void input()
{
    scanf("%d%d", &V, &E);
    int i;
    memset(A, 0, sizeof(A));
    memset(B, 0, sizeof(B));
    memset(ia, 0, sizeof(ia));
    memset(ib, 0, sizeof(ib));
    int a, b;
    for (i = 0; i < E; ++i)
    {
        scanf("%d%d", &a, &b);
        --a, --b;
        ia[a]++, ia[b]++;
        A[a][b]++,A[b][a]++;
    }
    for (i = 0; i < E; ++i)
    {
        scanf("%d%d", &a, &b);
        --a, --b;
        ib[a]++, ib[b]++;
        B[a][b]++, B[b][a]++;
    }
}

int Same(int k)
{
    if (ib[x[k]] != ia[k]) return 0;
    int i;
    for (i = k; i >= 0; --i)
    {
        if (B[x[k]][x[i]] != A[k][i]) return 0;
    }
    return 1;
}

int dfs(int k)
{
    if (k == V) return 1;
    int i;
    for (i = 0; i < V; ++i)
    {
        if (used[i]) continue;
        x[k] = i;
        if (Same(k))
        {
            used[i] = 1;
//           printf("+ %d\n", x[k]);
            if (dfs(k + 1)) return 1;
  //          printf("- %d\n", x[k]);
            used[i] = 0;
        }
    }
    return 0;
}

int main()
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        input();
        memset(used, 0, sizeof(used));
        if(dfs(0)) printf("same\n");
        else printf("different\n");
    }
    system("pause");
    return 0;
}
Reply
Title
Message
(64K)
University of Science and Technology of China
Online Judge for ACM/ICPC
Processed in 1.7ms with 2 query(s).