- 相關(guān)推薦
筆試算法題:求6*7網(wǎng)格中的黑點(diǎn)分布
求網(wǎng)格中的黑點(diǎn)分布。現(xiàn)有6*7的網(wǎng)格,在某些格子中有黑點(diǎn),已知各行與各列中有黑點(diǎn)的點(diǎn)數(shù)之和,請(qǐng)?jiān)谶@張網(wǎng)格中畫出黑點(diǎn)的位置。(這是一網(wǎng)友提出的題目,說是他筆試時(shí)遇到算法題)
#define ROWS 6
#define COLS 7
int iPointsR[ROWS] = {2, 0, 4, 3, 4, 0}; // 各行黑點(diǎn)數(shù)和的情況
int iPointsC[COLS] = {4, 1, 2, 2, 1, 2, 1}; // 各列黑點(diǎn)數(shù)和的情況
int iCount, iFound;
int iSumR[ROWS], iSumC[COLS], Grid[ROWS][COLS];
int Set(int iRowNo) {
if(iRowNo == ROWS) {
for(int iColNo=0; iColNo < COLS && iSumC[iColNo]==iPointsC[iColNo]; iColNo++)
if(iColNo == COLS-1) {
printf(“\nNo.%d:\n”, ++iCount);
for(int i=0; i < ROWS; i++)
for(int j=0; j < COLS; j++)
printf(“%d%c”, Grid[i][j], (j+1) % COLS ? ‘ ‘ : ‘\n’);
iFound = 1; // iFound = 1,有解
}
} else {
for(int iColNo=0; iColNo < COLS; iColNo++) {
if(iPointsR[iRowNo] == 0) {
Set(iRowNo + 1);
} else if(Grid[iRowNo][iColNo]==0) {
Grid[iRowNo][iColNo] = 1;
iSumR[iRowNo]++; iSumC[iColNo]++; if(iSumR[iRowNo] Set(iRowNo);
else if(iSumR[iRowNo]==iPointsR[iRowNo] && iRowNo < ROWS)
Set(iRowNo + 1);
Grid[iRowNo][iColNo] = 0;
iSumR[iRowNo]–;
iSumC[iColNo]–;
}
}
}
return iFound; // 用于判斷是否有解
}
int main(int argc, char* argv[]) {
if(!Set(0))
printf(“Failure!”);
}
【筆試算法題:求6*7網(wǎng)格中的黑點(diǎn)分布】相關(guān)文章:
迅雷2道算法類筆試真題11-21
基于遺傳算法的OD分布03-21
求筆試經(jīng)驗(yàn)11-19
求DTT的筆試內(nèi)容11-21
求銀行的筆試形式11-21
創(chuàng)新工場2014筆試算法題匯總附答案11-16
基于粒子群算法的分布式論文10-27
名企筆試中不同的主觀題07-16
搜狐筆試真題編程筆試真題07-23