当前位置: 首页 > wzjs >正文

宣武做网站博客营销

宣武做网站,博客营销,陕西汉中网站建设,公司网页设计图题目描述 输入格式 第一行有一个正整数 T(T≤10),表示一共有 T 组数据。 接下来有 T 个 55 的矩阵,0 表示白色骑士,1 表示黑色骑士,* 表示空位。两组数据之间没有空行。 输出格式 对于每组数据都输出一行。如果能在…

题目描述

输入格式

第一行有一个正整数 T(T≤10),表示一共有 T 组数据。

接下来有 T 个 5×5 的矩阵,0 表示白色骑士,1 表示黑色骑士,* 表示空位。两组数据之间没有空行。

输出格式

对于每组数据都输出一行。如果能在 15 步以内(包括 15 步)到达目标状态,则输出步数,否则输出 -1

输入输出样例

输入 #1复制

2
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100

输出 #1复制

7
-1

说明/提示

代码实现;

#include <iostream>
#include <vector>
#include <queue>
#include <string>
#include <set>
#include <utility>
using namespace std;

// 目标状态
const string target = "111110111100*110001100001";

// 骑士的8个可能移动方向
const int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
const int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};

// 将矩阵转换为字符串
string matrixToString(const vector<string>& matrix) {
    string s;
    for (int i = 0; i < 5; ++i) {
        s += matrix[i];
    }
    return s;
}

// BFS求解最小步数
int bfs(const vector<string>& startMatrix) {
    string start = matrixToString(startMatrix);
    if (start == target) return 0;

    queue<pair<string, int> > q;
    set<string> visited;

    q.push(make_pair(start, 0));
    visited.insert(start);

    while (!q.empty()) {
        string current = q.front().first;
        int steps = q.front().second;
        q.pop();

        if (steps > 15) continue;

        int pos = current.find('*');
        int x = pos / 5;
        int y = pos % 5;

        for (int i = 0; i < 8; ++i) {
            int nx = x + dx[i];
            int ny = y + dy[i];

            if (nx >= 0 && nx < 5 && ny >= 0 && ny < 5) {
                string next = current;
                swap(next[pos], next[nx * 5 + ny]);

                if (next == target) return steps + 1;

                if (visited.find(next) == visited.end()) {
                    visited.insert(next);
                    q.push(make_pair(next, steps + 1));
                }
            }
        }
    }

    return -1;
}

int main() {
    int T;
    cin >> T;
    
    // 读取并处理T组数据
    for (int t = 0; t < T; ++t) {
        vector<string> matrix(5);
        
        // 确保读取5行有效数据
        for (int i = 0; i < 5; ) {
            string line;
            getline(cin, line);
            
            // 跳过空行(如果存在)
            if (line.empty()) continue;
            
            // 存储有效行
            matrix[i] = line;
            i++;
        }

        int result = bfs(matrix);
        cout << result << endl;
    }

    return 0;
}

http://www.dtcms.com/wzjs/436017.html

相关文章:

  • 网站开发工程师前景seo的优缺点
  • 外贸人常用网站好的推广方式
  • wordpress广告设置网站关键词优化报价
  • 东莞南城网站建设价格深圳网络营销信息推荐
  • wordpress非官方人员优化方案
  • 提供网站建设方案品牌广告文案
  • 北京市建设局网站首页广州头条新闻最新
  • 云南公司网站建设制作网站的步骤和过程
  • 类似站酷的设计网站百度贴吧广告投放
  • 婚嫁网站模板武汉建站优化厂家
  • 免费搭建微信小程序深圳seo推广外包
  • 做兼职靠谱的网站有哪些企业如何开展网络营销
  • 做外贸的网站开店流程福建网络seo关键词优化教程
  • 布吉网站建设哪家好百度搜索推广方案
  • 男女之间做那个的网站3小时百度收录新站方法
  • 党员写试卷需要在哪个网站做苏州企业网站关键词优化
  • 做网站的工作是什么seo关键词排名技巧
  • 做交友网站年收入seo技术培训泰州
  • 国家排污许可网站台账怎么做百度网站排名优化
  • uzi视频网站谁做的福州seo按天付费
  • 安徽省干部建设教育网站培训网址
  • php网站制作报价网站地址ip域名查询
  • 网站个人博客怎么做网站推广常用的方法
  • 徐州网站建设 网站推广卡点视频软件下载
  • 来宾住房和建设局网站苏州seo门户网
  • 泰安企业网站建设电话网站怎样被百度收录
  • 瑞安自适应网站建设seo顾问合同
  • 国际贸易网站排名竞价运营是做什么的
  • 网站流量监测推广找客户平台
  • 供应链管理八大流程网站seo关键词优化