查找

// ttt.cpp :

//

#include

"stdafx.h"

#include

<string.h>

#include

<iostream>

using

std::cout;

using

std::endl;

#define

SIZE 8

#if

0

int board[SIZE][SIZE] = {{1,1,5,5,1},

{1,1,0,0,0},

{1,0,2,0,0},

{4,1,4,1,0},

{3,3,1,3,2}};

#endif

#if

0

int board[SIZE][SIZE] = {{6,5,7},

{3,4,5},

{2,9,1}};

#endif

#if

1

int

board[SIZE][SIZE] = {{7,3,6,1,5,5,5,5},

{5,5,5,8,4,5,0,3},

{6,1,0,6,3,2,0,6},

{4,5,5,5,7,6,5,6},

{6,4,7,4,5,2,5,6},

{7,4,4,3,0,7,8,6},

{8,8,4,4,1,4,9,2},

{0,6,8,4,2,6,6,4}};

#endif

#if

0

int board[SIZE][SIZE] = {{9,5,0,4,8,7,1,7,2,7,9,5,0,4,8,7,1,7,2,7},

{2,2,6,1,0,6,5,5,9,4,2,2,6,1,0,6,5,5,9,4},

{9,0,9,1,7,7,1,1,5,9,9,0,9,1,7,7,1,1,5,9},

{7,7,6,9,6,6,5,6,3,8,7,7,6,6,4,6,6,6,3,8},

{4,8,1,7,9,3,9,0,8,8,4,8,1,7,9,3,9,0,8,8},

{5,0,7,6,3,8,5,6,1,1,5,0,7,6,3,8,5,6,1,1},

{7,7,8,4,8,1,0,5,0,4,7,7,8,4,8,1,0,3,0,4},

{7,4,4,4,4,3,1,7,5,9,7,4,4,4,4,3,1,7,5,9},

{6,2,1,7,8,5,7,4,1,5,6,2,1,7,8,5,7,4,1,8},

{5,9,7,5,3,8,8,3,1,8,5,9,7,5,3,8,8,3,1,8},

{9,5,0,4,8,7,1,7,2,7,9,5,0,4,8,7,1,7,2,7},

{2,2,6,1,0,6,5,5,9,4,2,2,6,1,0,6,5,5,9,4},

{9,0,9,1,7,7,6,1,5,9,9,0,9,1,7,7,1,1,5,9},

{7,7,6,9,6,6,5,6,3,8,7,7,6,9,6,6,5,6,3,8},

{4,8,1,7,6,3,9,0,8,8,4,8,1,7,9,3,9,0,8,8},

{5,0,7,6,3,8,5,6,1,1,5,0,7,6,3,8,5,6,1,1},

{7,7,6,4,8,1,0,3,0,4,7,7,8,4,8,1,0,3,0,4},

{7,4,4,4,4,3,1,7,5,9,7,4,4,4,4,3,1,7,5,9},

{6,2,1,7,8,5,7,4,1,8,6,2,1,7,8,5,7,4,1,8},

{5,9,7,5,3,8,8,3,1,8,5,9,7,5,3,8,8,3,1,8}};

#endif

int

FindMaxValue(int k[][SIZE], int nRow,int nColumn,int nsize, int *&pSum, int nNum)

{

//查找行

int nRowSum = 1;

for(int i=nColumn; i<nsize-1; ++i)

{

if(k[nRow][i] == k[nRow][i+1] && nNum == k[nRow][i])

{

nRowSum++;

}

}

//查找列

int nColumnSum = 1;

for(int i=nRow; i<nsize-1; ++i)

{

if(k[i][nColumn] == k[i+1][nColumn] && nNum == k[i][nColumn])

{

nColumnSum++;

}

}

//查找anti-对角线的值

int nAntiDiagonal = 1;

for(int i=nRow,j=nColumn; i<nsize-1,j<nsize-1; ++i,++j)

{

if(k[i][j] == k[i+1][j+1] && nNum == k[i][j])

nAntiDiagonal++;

}

//查找对角线的值

int nDiagonal = 1;

for(int i=nRow,j=nColumn; i<nsize-1,j<nsize-1,i>=0, j>=0; )

{

if(i == 0 && j == 0)

break;

while(j>0)

{

if(k[i][j] == k[i+1][j-1] && nNum == k[i][j])

{

nDiagonal++;

j--;

i++;

}

j--;

i++;

}

j = -1; 

//为了跳出循环

}

//比较四个谁大

int nTemp1 = 0;

int nTemp2 = 0;

if(nRowSum>=nColumnSum)

nTemp1 = nRowSum;

else

nTemp1 = nColumnSum;

if(nAntiDiagonal>=nDiagonal)

nTemp2 = nAntiDiagonal;

else

nTemp2 = nDiagonal;

if(nTemp1>=nTemp2 && nTemp1>=pSum[nNum-1])   //最后得出的值,必须与已经存在的值比较

pSum[nNum-1] = nTemp1;

else if(nTemp2>=nTemp1 && nTemp2>=pSum[nNum-1])

pSum[nNum-1] = nTemp2;

return 0;

}

int

run_test(int k[SIZE][SIZE],int size)

{

//按照数字查找01234、、9

int* pSumNum = new int[9];     //1-9

memset(pSumNum, 0,

sizeof(int)*9);

for(int i=0; i<size; ++i)  //row

{

for(int j=0; j<size; ++j)  //column

{

switch(k[i][j])

{

case 1:

//查找行、列、对角线、反对绞线

FindMaxValue(k,i,j,size, pSumNum, 1);

break;

case 2:

//

FindMaxValue(k,i,j,size, pSumNum, 2);

break;

case 3:

//

FindMaxValue(k,i,j,size, pSumNum, 3);

break;

case 4:

//

FindMaxValue(k,i,j,size, pSumNum, 4);

break;

case 5:

//

FindMaxValue(k,i,j,size, pSumNum, 5);

break;

case 6:

//

FindMaxValue(k,i,j,size, pSumNum, 6);

break;

case 7:

//

FindMaxValue(k,i,j,size, pSumNum, 7);

break;

case 8:

//

FindMaxValue(k,i,j,size, pSumNum, 8);

break;

case 9:

//

FindMaxValue(k,i,j,size, pSumNum, 9);

break;

}

}

}

for(int i=0; i<9; ++i)

cout<<pSumNum[i]<<endl;

if(pSumNum)

{

delete pSumNum;

pSumNum = NULL;

}

return 0;

}

int

_tmain(int argc, _TCHAR* argv[])

{

run_test(board, SIZE);

system(

"pause");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值