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

哪位大牛帮帮忙啊,一直WA....... 给几组BT的数据吧

Posted by whitesea at 2007-09-19 19:43:14 on Problem 3026
#include<stdio.h>
#include<string.h>
char map[105][105];
int id[105][105];
char m[105][105];
int cost[105][105];
int x, y;
const int MAX = 200000000;
int dx[13505], dy[13505];
int dxx[4] = { 0, 0, 1, -1 };
int dyy[4] = { 1, -1, 0, 0 };
int len;
int v;
void bfs( int xx, int yy )
{
    int head = 0, tail = 1, ttail, step = 0;
    int i, k, r, xxx, yyy;
    dx[0] = xx;
    dy[0] = yy;
    m[xx][yy] = '#';
    while( head < tail )
    {
        ttail = tail;
        step++;
        for( i = head; i < tail; i++ )
        {
            for( r = 0; r < 4; r++ )
            {
                xxx = dx[i]+dxx[r];
                yyy = dy[i]+dyy[r];
                
                if( xxx >= 0 && xxx < y && yyy >= 0 && yyy < x && m[xxx][yyy] != '#' )
                {
                    dx[ttail] = xxx;
                    dy[ttail++] = yyy;
                    if( m[xxx][yyy] == 'A' )
                    {
                        cost[id[xx][yy]][id[xxx][yyy]] = step;
                        cost[id[xxx][yyy]][id[xx][yy]] = step;
                    }
                    m[xxx][yyy] = '#';
                }
            }
        }
        head = tail;
        tail = ttail;
    }
}

void MST()
{
    int mincost[105], minans, min;
    int i, j, k;
    minans = 0;
    
    for( i = 1; i <= len; i++ )
    {
        mincost[i] = cost[v][i];
    }
    mincost[v] = -1;
    for( i = 1; i <= len; i++ )
    {
        min = MAX;
        k = 0;
        for( j = 1; j <= len; j++ )
        {
            if( mincost[j] > 0 && min > mincost[j] )
            {
                min = mincost[j];
                k = j;
            }
        }
        if( min == MAX )break;
        mincost[k] = -1;
        minans += min;
        
        for( j = 1; j <= len; j++ )
        {
            if( cost[k][j] < mincost[j] )
            {
                mincost[j] = cost[k][j];
            }
        }
    }
    printf( "%d\n", minans );
}


int main()
{
    int i, j, r, k;
    int kcase;
    scanf( "%d", &kcase );
    while( kcase-- )
    {
        scanf( "%d %d", &x, &y );
        len = 0;
        memset( id, 0, sizeof( id ) );
        getchar();
        for( i = 0; i < y; i++ )
        {
            gets(map[i]);
        }
        for( i = 0; i < y; i++ )
        {
            for( j = 0; j < x; j++ )
            {
                if( map[i][j] == 'S' )
                {
                    map[i][j] = 'A';
                    id[i][j] = ++len;
                    v = len;
                }
                else if( map[i][j] == 'A' )
                {
                    id[i][j] = ++len;
                }
            }
        }
        memset( cost, 0, sizeof( cost ) );
        for( i = 0; i < y; i++ )
        {
            for( j = 0; j < x; j++ )
            {
                if( map[i][j] == 'A' )
                {
                    for( k = 0; k < y; k++ )
                        for( r = 0; r < x; r++ )
                            m[k][r] = map[k][r]; 
                    
                    bfs( i, j );
                }
            }
        }
        MST();
    }
    return 0;
}


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