您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > c语言实现棋盘覆盖问题
棋盘覆盖问题问题描述:在一个2k×2k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。代码:#includestdio.hinttile=0;//整型变量,记录L型骨牌的数量intMatrix[100][100];//定义数据结构voidChessBoard(inttr,inttc,intdr,intdc,intsize){//tr和tc分别是棋盘左上角方格的行号、列号;dr和dc分别是特殊方格的行号、列号if(size==1)return;intt=tile++;//L型骨牌号,初值为0ints=size/2;//分割棋盘if(drtr+s&&dctc+s)//用L型骨牌号覆盖左上角子棋盘ChessBoard(tr,tc,dr,dc,s);//特殊方格在此棋盘中else{//特殊方格不在此棋盘中用,t号L型骨牌覆盖右下角Matrix[tr+s-1][tc+s-1]=t;//覆盖本子棋盘中的其余方格ChessBoard(tr,tc,tr+s-1,tc+s-1,s);}if(drtr+s&&dc=tc+s)//用L型骨牌号覆盖右上角子棋盘ChessBoard(tr,tc,dr,dc,s);//特殊方格在此棋盘中else{//特殊方格不在此棋盘中用,t号L型骨牌覆盖左下角Matrix[tr+s-1][tc+s]=t;//覆盖本子棋盘中的其余方格ChessBoard(tr,tc+s,tr+s-1,tc+s,s);}if(dr=tr+s&&dctc+s)//用L型骨牌号覆盖左下角子棋盘ChessBoard(tr+s,tc,dr,dc,s);//特殊方格在此棋盘中else{//特殊方格不在此棋盘中用,t号L型骨牌覆盖右上角Matrix[tr+s][tc+s-1]=t;//覆盖本子棋盘中的其余方格ChessBoard(tr+s,tc,tr+s,tc+s-1,s);}if(dr=tr+s&&dc=tc+s)//用L型骨牌号覆盖右上角子棋盘ChessBoard(tr+s,tc+s,dr,dc,s);//特殊方格在此棋盘中else{//特殊方格不在此棋盘中用,t号L型骨牌覆盖左上角Matrix[tr+s][tc+s]=t;//覆盖本子棋盘中的其余方格ChessBoard(tr+s,tc+s,tr+s,tc+s,s);}}intmain(){intsize,r,c,row,col;//memset(Matrix,0,sizeof(Matrix));for(inti=0;i=100;i++)//初始化为零{for(intj=0;j=100;j++){Matrix[i][j]=0;}}scanf(%d,&size);//输入棋盘大小scanf(%d%d,&row,&col);//输入特殊方格位置ChessBoard(0,0,row,col,size);for(r=0;rsize;r++)//输出棋盘覆盖结果{for(c=0;csize;c++){printf(%2d,Matrix[r][c]);}printf(\n);}return0;}输出结果:
本文标题:c语言实现棋盘覆盖问题
链接地址:https://www.777doc.com/doc-6239284 .html