利用DFS得出十二张牌的赢法(二)

2013-12-06 09:53:47 · 作者: · 浏览: 384


    }
    return false;
    }
    bool Is_Win(N *p)
    {
    int eye;
    int i,j;
    memset(mark,0,sizeof(mark));
    for(i = 1;i <= 14; ++i)
    {
    mark[p[i].ty][p[i].id]++;
    }
    eye = 0;
    for(i = 1;i <= 4; ++i)
    {
    for(j = 1;j <= 9; ++j)
    {
    if(mark[i][j] == 2)
    {
    eye++;
    }
    if(mark[i][j] >= 5)
    return false;
    }
    }
    if(eye == 7)
    {
    return true;
    }
    for(i = 1;i <= 3 && 1 <= mark[i] && 1 <= mark[i] ; ++i)
    ;
    if(i == 4)
    {
    for(i = 1;i <= 7 && 1 <= mark [i] ; ++i)
    ;
    if(i == 8)
    {
    for(i = 1;i <= 3 ; ++i)
    {
    if(2 == mark[i] || 2 == mark[i] )
    return true;
    }
    for(i = 1;i <= 7; ++i)
    {
    if(mark [i] == 2)
    return true;
    }
    }
    }
    dfs_con = false;
    return dfs(0,0,0,1,1);
    }
    int main()
    {
    int n,i;
    int top;
    scanf("%d",&n);
    char c;
    while(n--)
    {
    top = 0;
    E temp;
    for(i = 1;i <= 13; ++i)
    {
    scanf("%d%c",&s[i].id,&c);
    if(c == 'm')
    {
    s[i].ty = 1;
    }
    else if(c == 's')
    {

    s[i].ty = 2;
    }
    else if(c == 'p')
    {
    s[i].ty = 3;
    }
    else if(c == 'c')
    {
    s[i].ty = 4;
    }
    }
    for(i = 1;i <= 9; ++i)
    {
    s[14].id = i;
    s[14].ty = 1;
    if(Is_Win(s))
    {
    temp.id = i;
    temp.ty = 'm';
    st[top++] = temp;
    }
    }
    for(i = 1;i <= 9; ++i)
    {
    s[14].id = i;
    s[14].ty = 2;
    if(Is_Win(s))
    {
    temp.id = i;
    temp.ty = 's';
    st[top++] = temp;
    }
    }
    for(i = 1;i <= 9; ++i)
    {
    s[14].id = i;
    s[14].ty = 3;
    if(Is_Win(s))
    {
    temp.id = i;
    temp.ty = 'p';
    st[top++] = temp;
    }
    }
    for(i = 1;i <= 7; ++i)
    {
    s[14].id = i;
    s[14].ty = 4;
    if(Is_Win(s))
    {
    temp.id = i;
    temp.ty = 'c';
    st[top++] = temp;
    }
    }
    if(top == 0)
    {
    printf("Nooten\n");
    }
    else
    {
    printf("%d",top);
    for(i = 0;i < top; ++i)
    {
    printf(" %d%c",st[i].id,st[i].ty);
    }
    printf("\n");
    }
    }
    return 0;
    }