代码如下,据说格式错误,nnd#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct MatrixListNode_stru {int n ;int m ;char * matrix ;struct MatrixListNode_stru * next ;} MatrixListNode_stru ;int connect ( MatrixListNode_stru * pMatrixStru );int main ( void ){//demo data//char input[1024] ="3 3 100 101 111 4 3 111 101 101 101 1 5 01110";char input [ 1024 ];gets ( input );//split str into structMatrixListNode_stru * dataList = NULL ;MatrixListNode_stru * currNode = NULL ;char * pch ;int count = 0 ;pch = strtok ( input , " " );while ( NULL != pch ){++ count ;if ( 1 == count ){if ( NULL == dataList ){dataList = ( MatrixListNode_stru * ) malloc ( sizeof ( MatrixListNode_stru ) * 1 );dataList -> next = NULL ;currNode = dataList ;} else {currNode = dataList ;while ( NULL != currNode -> next ){currNode = currNode -> next ;}currNode -> next = ( MatrixListNode_stru * ) malloc ( sizeof ( MatrixListNode_stru ) * 1 );currNode = currNode -> next ;currNode -> next = NULL ;}sscanf ( pch , "%d" , & currNode -> n );}else if ( 2 == count ){sscanf ( pch , "%d" , & currNode -> m );currNode -> matrix = ( char * ) malloc ( sizeof ( char ) * (( currNode -> n * currNode -> m ) + 1 ));int i ;for ( i = 0 ; i < currNode -> n * currNode -> m ; ++ i )currNode -> matrix [ i ] = '0' ;currNode -> matrix [ currNode -> n * currNode -> m ] = '\0' ;}else if ( 2 < count && count <= ( currNode -> n + 2 )){memcpy ( currNode -> matrix + ( count - 3 ) * currNode -> m , pch , strlen ( pch ));//if ( count == ( currNode -> n + 2 ))count = 0 ;}pch = strtok ( NULL , " " );}//check split result/*currNode = dataList;while(NULL != currNode ){printf("n=%d, m=%d, matrix = %s\n", currNode->n, currNode->m, currNode->matrix);currNode = currNode->next;}*///make data connectedcurrNode = dataList ;while ( NULL != currNode ){printf ( "%d " , connect ( currNode ));currNode = currNode -> next ;}printf ( " \n " );//cleancurrNode = dataList ;MatrixListNode_stru * nodeNext = NULL ;for (; currNode != NULL ; currNode = nodeNext ){nodeNext = currNode -> next ;free ( currNode -> matrix );free ( currNode );}return 0 ;}int connect ( MatrixListNode_stru * pMatrixStru ){int countChangedTotal = 0 ;int countChanged = 0 ;int isDone = 0 ;int i ;// creat a new matrixint row = pMatrixStru -> n + 2 ;int colum = pMatrixStru -> m + 2 ;char * newMatr = ( char * ) malloc ( sizeof ( char ) * ( row * colum ));for ( i = 0 ; i < row * colum ; ++ i ){newMatr [ i ] = '0' ;}// put data infor ( i = 0 ; i < pMatrixStru -> n ; ++ i ){memcpy ( newMatr + ( i + 1 ) * colum + 1 , pMatrixStru -> matrix + i * pMatrixStru -> m , pMatrixStru -> m );}//change datawhile ( ! isDone ){for ( i = colum ; i < ( row - 1 ) * colum ; ++ i ){if ( 0 == i % colum || 0 == ( i + 1 ) % colum ){} else {if ( newMatr [ i ] == '0' ){//check itint fourWay = 0 ;if ( newMatr [ i + 1 ] == '0' )++ fourWay ;if ( newMatr [ i - 1 ] == '0' )++ fourWay ;if ( newMatr [ i - colum ] == '0' )++ fourWay ;if ( newMatr [ i + colum ] == '0' )++ fourWay ;if ( fourWay < 2 ){//change itnewMatr [ i ] = '1' ;++ countChanged ;}}}}if ( 0 == countChanged )isDone = 1 ;else {countChangedTotal += countChanged ;countChanged = 0 ;}}free ( newMatr );return countChangedTotal ;}
渣打科营 Mini Code Marathon
最新推荐文章于 2019-12-18 09:55:03 发布