2012年第三屆藍橋杯C/C++程式設計本科B組省賽 放棋子(程式碼填空)
放棋子
今有 6 x 6 的棋盤格。其中某些格子已經預先放好了棋子。現在要再放上去一些,使得:每行每列都正好有3顆棋子。我們希望推算出所有可能的放法。下面的程式碼就實現了這個功能。
初始陣列中,“1”表示放有棋子,“0”表示空白。
int N = 0;
bool CheckStoneNum(int x[][6])
{
for(int k=0; k<6; k++)
{
int NumRow = 0;
int NumCol = 0;
for(int i=0; i<6; i++)
{
if(x[k][i]) NumRow++;
if(x[i][k]) NumCol++;
}
if(_____________________) return false; // 填空
}
return true;
}
int GetRowStoneNum(int x[][6], int r)
{
int sum = 0;
for(int i=0; i<6; i++) if(x[r][i]) sum++;
return sum;
}
int GetColStoneNum(int x[][6], int c)
{
int sum = 0;
for(int i=0; i<6; i++) if(x[i][c]) sum++;
return sum;
}
void show(int x[][6])
{
for(int i=0; i<6; i++)
{
for(int j=0; j<6; j++) printf("%2d", x[i][j]);
printf("\n");
}
printf("\n");
}
void f(int x[][6], int r, int c);
void GoNext(int x[][6], int r, int c)
{
if(c<6)
_______________________; // 填空
else
f(x, r+1, 0);
}
void f(int x[][6], int r, int c)
{
if(r==6)
{
if(CheckStoneNum(x))
{
N++;
show(x);
}
return;
}
if(______________) // 已經放有了棋子
{
GoNext(x,r,c);
return;
}
int rr = GetRowStoneNum(x,r);
int cc = GetColStoneNum(x,c);
if(cc>=3) // 本列已滿
GoNext(x,r,c);
else if(rr>=3) // 本行已滿
f(x, r+1, 0);
else
{
x[r][c] = 1;
GoNex。t(x,r,c);
x[r][c] = 0;
if(!(3-rr >= 6-c || 3-cc >= 6-r)) // 本行或本列嚴重缺子,則本格不能空著!
GoNext(x,r,c);
}
}
int main(int argc, char* argv[])
{
int x[6][6] = {
{1,0,0,0,0,0},
{0,0,1,0,1,0},
{0,0,1,1,0,1},
{0,1,0,0,1,0},
{0,0,0,1,0,0},
{1,0,1,0,0,1}
};
f(x, 0, 0);
printf("%d\n", N);
return 0;
}
答案:NumRow
!= 3 || NumCol != 3f(x, r, c + 1)
x[r][c] == 1
相關文章
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 大數乘法(程式碼填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 方陣旋轉(程式碼填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 奇怪的比賽(結果填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 微生物增殖(結果填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 海盜比酒量(結果填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 密碼發生器(程式設計大題)C++程式設計密碼
- 第十三屆藍橋杯省賽C/C++ B組C++
- 藍橋杯2014年第五屆決賽C_C++程式設計本科B組C++程式設計
- 試題B:小球反彈(第十五屆藍橋杯省賽B組c/c++組)C++
- 第六屆藍橋杯省賽CC++B組C++
- 第十四屆藍橋杯省賽C++ B組(個人經歷 + 題解)C++
- 第十屆藍橋杯省賽C++B組 等差數列C++
- 第十五屆藍橋杯C++B組省賽總結C++
- 【藍橋杯考前突擊】第十屆藍橋杯省賽C/C++大學B組 試題 D 數的分解C++
- 第四屆藍橋杯C/C++本科B組第二道大題C++
- 歷屆藍橋杯省賽(C、C++)的答案(轉)C++
- 藍橋杯__省賽__第七屆__C/C++__大學A組C++
- 藍橋杯__省賽__第八屆__C/C++__大學A組C++
- 藍橋杯__省賽__第九屆__C/C++__大學A組C++
- 第十五屆藍橋杯大賽軟體賽省賽 C/C++ 大學 A 組C++
- 第十三屆藍橋杯省賽A組
- 第十五屆藍橋杯軟體賽省賽C/C++B 組題解C++
- 2017第八屆藍橋杯C/C++ B組省賽第二題 秒解C++
- 2018年第九屆藍橋杯省賽試題及詳解(Java本科B組)Java
- 2013年第四屆藍橋杯省賽試題及詳解(Java本科C組)Java
- 2016年藍橋杯C/C++組省賽第三題--湊算式C++
- 2017省賽藍橋杯B組
- 2016年省賽第七屆藍橋杯B組C/C++第九題解 交換瓶子C++
- 第14屆藍橋杯B組國賽
- 2015年藍橋杯六屆省賽大學B組真題
- 2014年第五屆藍橋杯省賽試題及詳解(Java本科C組)Java
- 2019年省賽第十屆藍橋杯B組C/C++試題H解 等差數列C++
- 2018藍橋杯省賽B組
- 2020藍橋杯省賽B組C++(第二場)真題C++
- 2018年第九屆藍橋杯省賽試題及詳解(Java本科A組)Java
- 第十屆藍橋杯C++國賽B組部分題解(假題解)C++
- 2015年省賽第六屆藍橋杯B組C/C++第五題解 九陣列分數C++陣列
- 第九屆藍橋杯省賽C++A組 倍數問題(dfs)C++