65,210
社区成员
发帖
与我相关
我的任务
分享
/*
输出中,*表示黑点,-表示空白
*/
#include <iostream>
#define ROWS 6
#define COLS 7
int iPointsR[ROWS] = {2, 0, 4, 3, 4, 0}; // 各行黑点数和的情况
int iPointsC[COLS] = {4, 1, 2, 2, 1, 2, 1}; // 各列黑点数和的情况
char grid[ROWS+1][COLS+1];
int pointsOnCol[COLS]={0};
bool finish=0;
using namespace std;
void goNextCell(int row,int col,int pointsOnCurrentRow)
{
if(finish) return;
if(iPointsR[row]==0) goNextCell(row+1,0,0);
if(row==ROWS)
{
finish=1;
return;
}
int i;
for(i=col;i<COLS;i++)
{
if(pointsOnCol[i]<iPointsC[i])
{
grid[row][i]='*';
pointsOnCol[i]++;
if(pointsOnCurrentRow+1==iPointsR[row]) goNextCell(row+1,0,0);
else goNextCell(row,i+1,pointsOnCurrentRow+1);
if(finish) return;
grid[row][i]=' ';
pointsOnCol[i]--;
}
}
}
int main()
{
int i,j;
for(i=0;i<ROWS;i++)
for(j=0;j<COLS;j++) grid[i][j]='-';
goNextCell(0,0,0);
for(i=0;i<ROWS;i++,puts(""))
for(j=0;j<COLS;j++) printf("%c",grid[i][j]);
return 0;
}
/*
输出:
**-----
-------
*-***--
*-* -*-
*--*-**
-------
*/