Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么会WA呀!!!下边是我的代码,各位牛人,帮忙看看。。。不知道为什么人WA?? #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_N 65540 //black:1, white:0 int weight[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 }; //2的0次方到2的15次方 int occured[ MAX_N ]; int sour_state; const int dest_state1 = 0; //后十六位全0,即全white const int dest_state2 = 65535; //后十六位全1,即全black int queue[ MAX_N ]; int front, rear; int flip[] = { 1, -1, 4, -4 }; char s[ 4 ][ 8 ]; int init() { int i, j; sour_state = 0; for( i = 0; i < 4; i++ ) { scanf( "%s", s[ i ] ); for( j = 0; j < 4; j++ ) { if( s[ i ][ j ] == 'b' ) sour_state += weight[ 15 - ( i * 4 + j ) ]; //对应位 置1 } } if( sour_state == dest_state1 || sour_state == dest_state2 ) { return 1; } return 0; } int BFS() { int cur_state, new_state; int op; int i, j, pos; memset( occured, 0, sizeof( occured ) ); front = rear = 0; //初始状态进队 queue[ rear ] = sour_state; rear = ( rear + 1 ) % MAX_N; occured[ sour_state ] = 1; while( front != rear ) { //出队 cur_state = queue[ front ]; front = ( front + 1 ) % MAX_N; //十六种变化方法 for( i = 15; i >= 0; i-- ) { op = 0; //四个方向扫描,产生对应的操作码 for( j = 0; j < 4; j++ ) { pos = i + flip[ j ]; if( pos >= 0 && pos <= 15 ) op += weight[ pos ]; //对应位 置1 } op += weight[ i ]; //自己本身也要翻转 new_state = cur_state ^ op; if( !occured[ new_state ] ) { if( new_state == dest_state1 || new_state == dest_state2 ) { return occured[ cur_state ]; } //进队 occured[ new_state ] = occured[ cur_state ] + 1; queue[ rear ] = new_state; rear = ( rear + 1 ) % MAX_N; } } } return -1; } int main() { #ifndef ONLINE_JUDGE FILE *fin; fin = freopen( "t.in", "r", stdin ); if( !fin ) { printf( "reopen in file failed...\n" ); exit( 0 ); } #endif int T, min; scanf( "%d", &T ); // printf( "%d\n", sizeof( int ) ); while( T-- ) { if( init() == 1 ) printf( "0\n" ); else { min = BFS(); if( min > 0 ) printf( "%d\n", min ); else printf( "Impossible\n" ); } if( T ) printf( "\n" ); } #ifndef ONLINE_JUDGE fclose( stdin ); #endif return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator