poj2676(数独 搜索)

本文介绍了一种使用暴力搜索和二维布尔数组标记已使用数字的数独求解算法。通过递归深度优先搜索,该算法能有效找到9x9数独的解决方案。

题目链接

题意

解出N个9x9的数独,(输出一个解即可)

解题思路

用一个二维布尔数组来标记,点(x,y)的行,列,块的数字是否已经出现过,然后直接暴力搜索即可

AC代码

#include<vector>
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<set>
#include<cstring>
#include<functional>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<int,pii> PII;
bool vis[100][10];
int G[10][10];
int N = 10;
int M = 20;

inline int getid(int& x,int& y)     //得到(x,y)所属的块
{
    if(x<3&&y<3) return M+1;
    else if(x<6&&y<3) return M+2;
    else if(x<9&&y<3)return M+3;
    else if(x<3&&y<6)return M+4;
    else if(x<6&&y<6) return M+5;
    else if(x<9&&y<6) return M+6;
    else if(x<3&&y<9)return M+7;
    else if(x<6&&y<9) return M+8;
    else return M+9;
}

bool ojbk = 0;

void dfs(int x,int y)
{
    if(ojbk)return;
    if(y>8){
        y %= 9;
        x++;
    }
    if(x==9&&y==0){
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                cout << G[i][j];
            }
        }
        ojbk = 1;
    }
    if(G[x][y]){
        dfs(x,y+1);
        return;
    }
    int r = y;
    int c = N+x;
    int id = getid(x,y);
    for(int k=1;k<=9;k++){
        if(vis[r][k]||vis[c][k]||vis[id][k]) continue;
        G[x][y] = k;
        vis[r][k] = 1;
        vis[c][k] = 1;
        vis[id][k] = 1;
        dfs(x,y+1);
        G[x][y] = 0;        //回朔
        vis[r][k] = 0;
        vis[c][k] = 0;
        vis[id][k] = 0;
    }
}


int main(int argc, char const *argv[])
{
    string s;
    while(cin >> s){
        if(s=="end")break;
        ojbk = 0;
        memset(vis,0,sizeof(vis));
        int k = 0;
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                if(s[k]=='.'){
                    G[i][j] = 0;
                    k++;
                    continue;
                }
                G[i][j] = s[k++]-'0';
                if(G[i][j]==0)continue;
                vis[j][G[i][j]] = 1;
                vis[N+i][G[i][j]] = 1;
                vis[getid(i,j)][G[i][j]] = 1;
            }
        }
        dfs(0,0);
        cout << endl;
    }
    return 0;
}

转载于:https://www.cnblogs.com/django-lf/p/9763701.html

在车辆工程中,悬架系统的性能评估和优化一直是研究的热点。悬架不仅关乎车辆的乘坐舒适性,还直接影响到车辆的操控性和稳定性。为了深入理解悬架的动态行为,研究人员经常使用“二自由度悬架模型”来简化分析,并运用“传递函数”这一数学工具来描述悬架系统的动态特性。 二自由度悬架模型将复杂的车辆系统简化为两个独立的部分:车轮和车身。这种简化模型能够较准确地模拟出车辆在垂直方向上的运动行为,同时忽略了侧向和纵向的动态影响,这使得工程师能够更加专注于分析与优化与垂直动态相关的性能指标。 传递函数作为控制系统理论中的一种工具,能够描述系统输入和输出之间的关系。在悬架系统中,传递函数特别重要,因为它能够反映出路面不平度如何被悬架系统转化为车内乘员感受到的振动。通过传递函数,我们可以得到一个频率域上的表达式,从中分析出悬架系统的关键动态特性,如系统的振幅衰减特性和共振频率等。 在实际应用中,工程师通过使用MATLAB这类数学软件,建立双质量悬架的数学模型。模型中的参数包括车轮质量、车身质量、弹簧刚度以及阻尼系数等。通过编程求解,工程师可以得到悬架系统的传递函数,并据此绘制出传递函数曲线。这为评估悬架性能提供了一个直观的工具,使工程师能够了解悬架在不同频率激励下的响应情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值