求一个C++数独游戏的原代码! 30

要求:要C++不要C的能在MicrosoftVisualC++上运行并且无错误的急需,高分,谢谢!... 要求:要C++不要C的
能在Microsoft VisualC++上运行并且无错误的
急需,高分,谢谢!
展开
 我来答
施达克
2008-06-19
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
我这个很好

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int f(int i,int j,int s);
int n[9][9];
int line[9][9],column[9][9],block[9][9];
char youxi[9][9];
int m[9][9];
int l[9][9],c[9][9],v[9][9];
void main()

{
int x=81,a,b;char w;

while(1)
{
printf("<<<<<欢迎进入数独游戏>>>>>\n");
printf("< >\n");
printf("< 进入游戏请按a >\n");
printf("< 退出游戏请按e >\n");
printf("< 了解规则请按h >\n");
printf("< >\n");
printf("<<<<<<<<<<<<>>>>>>>>>>>>>>\n");
char temp;
scanf("%c",&w);
temp=w;
if(temp=='h') {

printf("** 数独游戏在9x9的方格内进行,分为3x3的小方格,被称为区. **\n");
printf("** 数独游戏首先从已经填入数字的格子开始. **\n");
printf("** 用1至9之间的数字填满空格,一个格子只能填入一个数字. **\n");
printf("** 每个数字在每一行只能出现一次; **\n");
printf("** 每个数字在每一列只能出现一次; **\n");
printf("** 每个数字在每一区只能出现一次; **\n");
printf("** 总结这些规则,即每个数字在每一行,每一列和每一区只能出现一次.**\n");}

if(temp=='a') break;
if(temp=='e') exit(1);
}
int i,j;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
n[i][j]=0;
line[i][j]=0;
column[i][j]=0;
m[i][j]=0;
l[i][j]=0;
c[i][j]=0;
v[i][j]=0;
block[i][j]=0;
}
srand((unsigned)time(NULL));
f(0,0,rand()%9+1);

for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{ int y;
y=rand()%9;
if(y<=3)
{
m[i][j]=n[i][j];

}
}

}
while(1)
{

for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
if(m[i][j]!=0) {youxi[i][j]=m[i][j]+48;
l[i][m[i][j]-1]=1;
c[j][m[i][j]-1]=1;
v[i/3*3+j/3][m[i][j]-1]=1;}
}

}

printf("┏━┯━┯━┳━┯━┯━┳━┯━┯━┓\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[0][0],youxi[0][1],youxi[0][2],youxi[0][3],youxi[0][4],youxi[0][5],youxi[0][6],youxi[0][7],youxi[0][8]);
printf("┠—┼—┼—╂—┼—┼—╂—┼—┼—┨\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[1][0],youxi[1][1],youxi[1][2],youxi[1][3],youxi[1][4],youxi[1][5],youxi[1][6],youxi[1][7],youxi[1][8]);
printf("┠—┼—┼—╂—┼—┼—╂—┼—┼—┨\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[2][0],youxi[2][1],youxi[2][2],youxi[2][3],youxi[2][4],youxi[2][5],youxi[2][6],youxi[2][7],youxi[2][8]);
printf("┣━┿━┿━╋━┿━┿━╋━┿━┿━┫\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[3][0],youxi[3][1],youxi[3][2],youxi[3][3],youxi[3][4],youxi[3][5],youxi[3][6],youxi[3][7],youxi[3][8]);
printf("┠—┼—┼—╂—┼—┼—╂—┼—┼—┨\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[4][0],youxi[4][1],youxi[4][2],youxi[4][3],youxi[4][4],youxi[4][5],youxi[4][6],youxi[4][7],youxi[4][8]);
printf("┠—┼—┼—╂—┼—┼—╂—┼—┼—┨\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[5][0],youxi[5][1],youxi[5][2],youxi[5][3],youxi[5][4],youxi[5][5],youxi[5][6],youxi[5][7],youxi[5][8]);
printf("┣━┿━┿━╋━┿━┿━╋━┿━┿━┫\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[6][0],youxi[6][1],youxi[6][2],youxi[6][3],youxi[6][4],youxi[6][5],youxi[6][6],youxi[6][7],youxi[6][8]);
printf("┠—┼—┼—╂—┼—┼—╂—┼—┼—┨\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[7][0],youxi[7][1],youxi[7][2],youxi[7][3],youxi[7][4],youxi[7][5],youxi[7][6],youxi[7][7],youxi[7][8]);
printf("┠—┼—┼—╂—┼—┼—╂—┼—┼—┨\n");
printf("┃%c │%c │%c ┃%c │%c │%c ┃%c │%c │%c ┃\n",youxi[8][0],youxi[8][1],youxi[8][2],youxi[8][3],youxi[8][4],youxi[8][5],youxi[8][6],youxi[8][7],youxi[8][8]);
printf("┗━┷━┷━┻━┷━┷━┻━┷━┷━┛\n");
loop: printf("请输入填写数字的坐标(1-9)\n");
scanf("%d%d",&a,&b);
if(a>9||b>9){printf("plaese intput 1-9\n");goto loop;}

if(m[a-1][b-1]!=0) printf("该空格内有数字\n%d\n",m[a-1][b-1]);
else
{
printf("请填入相应数字\n");
scanf("%d",&m[a-1][b-1]);
if(!l[a-1][m[a-1][b-1]-1]&&!c[b-1][m[a-1][b-1]-1]&&!v[(a-1)/3*3+(b-1)/3][m[a-1][b-1]-1] ) continue;
else
{
m[a-1][b-1]=0;
printf("填写错误\n");

printf("显示答案键入r\n");exit(0);

if(getchar()=='r')
{
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
m[i][j]=n[i][j];
}

}

}

}

}
}

int f(int i,int j,int s)
{
int k;
for (k = s - 1; k < 9; k++)
{
if (!line[i][k] && !column[j][k] && !block[i/3*3+j/3][k])
{
n[i][j] = k + 1;
line[i][k] = 1;
column[j][k] = 1;
block[i/3*3+j/3][k] = 1;

if (i == 8 && j == 8)

return 1;
if (j == 8)
{
j = 0;
i++;
}
else
j++;
f(i, j, 1);

return 1;
}

if (k == 8) //huisu

{
do
{
if (j == 0)

{
j = 8;
i--;
}
else
j--;
line[i][n[i][j]-1] = 0;
column[j][n[i][j]-1] = 0;
block[i/3*3+j/3][n[i][j]-1] = 0;
}
while (n[i][j] == 9);

f(i, j, n[i][j] + 1);
return 1;
}
}
return 1;
}
somaniya
2008-06-15 · TA获得超过249个赞
知道答主
回答量:98
采纳率:0%
帮助的人:86.3万
展开全部
#include <iostream>
#include <vector>
using namespace std;

vector <vector <int> > get();
void process(vector <vector <int> >,int,int);
void display(vector <vector <int> >);

vector <int> v(vector <vector <int> >,int,int);

void main()
{
int a[9][9]=
{{0,0,0,0,0,1,0,0,0},
{0,6,0,0,0,4,9,0,0},
{0,0,0,3,0,0,0,8,0},
{0,0,0,0,9,0,0,3,0},
{0,4,0,0,6,0,7,0,5},
{0,0,2,7,0,0,1,0,0},
{0,0,1,8,0,0,4,0,0},
{5,0,7,0,0,2,0,0,0},
{0,9,0,0,0,0,0,0,2}};

vector <vector <int> > num;

for (int i=0;i<9;i++)
{
vector <int> temp(a[i],a[i]+9);
num.push_back(temp);
}

process(num,0,0);
}

vector <vector <int> > get()
{
vector <vector <int> > temp;

for (int i=0;i<9;i++)
{
vector <int> temp1;
temp1.clear();
for (int j=0;j<9;j++)
{
int temp2;
cin>>temp2;
temp1.push_back(temp2);
}
temp.push_back(temp1);
}

return temp;
}

void process(vector <vector <int> > set,int x,int y)
{
if (x==9)
{
cout<<endl;
display(set);
cout<<endl;
}
else if (set[x][y])
{
if (y==8)
{
y=0;
x++;
}
else
{
y++;
}
process(set,x,y);
}
else
{
vector <int> temp=v(set,x,y);

for (int i=0;i<temp.size();i++)
{
set[x][y]=temp[i];

int m=x,n=y;
if (n==8)
{
n=0;
m++;
}
else
{
n++;
}
process(set,m,n);
}
}
}

void display(vector <vector <int> > num)
{
for (int i=0;i<9;i++)
{
for (int j=0;j<9;j++)
{
cout<<num[i][j]<<" ";
if (j%3==2)
cout<<"\t";
}
cout<<endl;
if (i%3==2)
cout<<endl;
}
}

vector <int> v(vector <vector <int> >set,int x,int y)
{
int num[9]={1,2,3,4,5,6,7,8,9},i,j;
vector <int> temp(num,num+9);

for (i=0;i<9;i++)
{
if (set[x][i])
temp[set[x][i]-1]=0;
if (set[i][y])
temp[set[i][y]-1]=0;
}

for (i=x/3*3;i<x/3*3+3;i++)
for (j=y/3*3;j<y/3*3+3;j++)
if (set[i][j])
temp[set[i][j]-1]=0;

for (i=0;i<temp.size();i++)
{
if (!temp[i])
{
temp.erase(temp.begin()+i);
i--;
}
}

return temp;
}

参考资料: http://tieba.baidu.com/f?kz=182751773

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
生活与生态
2008-06-15
知道答主
回答量:44
采纳率:0%
帮助的人:18.9万
展开全部
介绍一下数独吧~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liang1wu
2008-06-16 · TA获得超过1671个赞
知道小有建树答主
回答量:1501
采纳率:0%
帮助的人:724万
展开全部
这是不是八皇后问题啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式