标签:第三次 int 软工 作业 num void 小时 include 代码
GitHub项目地址:[https://github.com/1291396939/hello-world]
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) |
---|---|---|
Planning | 计划 | 0.5小时 |
Estimate | 估计这个任务需要多少时间 | 33小时 |
Development | 开发 | 8小时 |
Analysis | 需求分析 (包括学习新技术) | 8小时 |
Design Spec | 生成设计文档 | 1小时 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 1小时 |
Coding | 具体编码 | 5小时 |
Code Review | 代码复审 | 2小时 |
Test | 测试(自我测试,修改代码,提交修改) | 1小时 |
Reporting | 报告 | 2小时 |
Test Repor | 测试报告 | 1小时 |
Size Measurement | 计算工作量 | 0.5小时 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 1小时 |
合计 | 34小时 |
过程:
一开始不知道要输入输出文件,所以摸索了一下,刚开始看到命令行输入,我还是不明白,后来去百度了怎么用txt文件输入输出,然后就尝试了fopen(),fwrite(),fscanf()一系列函数。
后来忘记作业这回事了,于是就只有一个九宫格的代码了。
计划什么的都没有实现。
GG了。
代码
#include <bits/stdc++.h>
#include"stdafx.h"
#include<iostream>
#include<Windows.h>
#include<fstream>
#include<string>
using namespace std;
bool sign = false;/* 构造完成标志 */
int num[9][9];/* 创建数独矩阵 */
/* 函数声明 */
void Input();
void Output();
bool Check(int n, int key);
int DFS(int n);
int main()
{
cout << "请输入一个9*9的数独矩阵,空位以0表示:" << endl;
Input();
DFS(0);
Output();
system("pause");
}
/* 读入数独矩阵 */
void Input()
{
char temp[9][9];
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cin >> temp[i][j];
num[i][j] = temp[i][j] - '0';
}
}
}
/* 输出数独矩阵 */
void Output()
{
cout << endl;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cout << num[i][j] << " ";
if (j % 3 == 2)
{
cout << " ";
}
}
cout << endl;
if (i % 3 == 2)
{
cout << endl;
}
}
}
/* 判断key填入n时是否满足条件 */
bool Check(int n, int key)
{
/* 判断n所在横列是否合法 */
for (int i = 0; i < 9; i++)
{
/* j为n竖坐标 */
int j = n / 9;
if (num[j][i] == key) return false;
}
/* 判断n所在竖列是否合法 */
for (int i = 0; i < 9; i++)
{
/* j为n横坐标 */
int j = n % 9;
if (num[i][j] == key) return false;
}
/* x为n所在的小九宫格左顶点竖坐标 */
int x = n / 9 / 3 * 3;
/* y为n所在的小九宫格左顶点横坐标 */
int y = n % 9 / 3 * 3;
/* 判断n所在的小九宫格是否合法 */
for (int i = x; i < x + 3; i++)
{
for (int j = y; j < y + 3; j++)
{
if (num[i][j] == key) return false;
}
}
/* 全部合法,返回正确 */
return true;
}
/* 深搜构造数独*/
int DFS(int n)
{
/* 所有的都符合,退出递归 */
if (n > 80)
{
sign = true;
return 0;
}
/* 当前位不为空时跳过 */
if (num[n/9][n%9] != 0)
{
DFS(n+1);
}
else
{
/* 否则对当前位进行枚举测试 */
for (int i = 1; i <= 9; i++)
{
/* 满足条件时填入数字 */
if (Check(n, i) == true)
{
num[n/9][n%9] = i;
/* 继续搜索 */
DFS(n+1);
/* 返回时如果构造成功,则直接退出 */
if (sign == true) return 0;
/* 如果构造不成功,还原当前位 */
num[n/9][n%9] = 0;
}
}
}
}
总结:
没有花太多时间在作业上,一个星期都在入门JAVA和学习以前的知识,有很多专业课挂了十多个学分,所以还在慢慢爬,这次作业很烂,几乎是垃圾,
标签:第三次,int,软工,作业,num,void,小时,include,代码 来源: https://www.cnblogs.com/liushanzai/p/11588212.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。