c++两点路径代码

为解决某些人对不明白的题了解一点(抄答案)

求各位看我文章的兄弟们点个关注吧!!!

质量一定棒!!!!!

适用版本:dev-c++ 5.11

本题主要考的几个步骤分别是循环,dfs,数组等的知识点,初学者请先理解一下再用,因为步骤比较多(麻烦)所以如果有更简单的步骤可以私信我。

题目:

演示-两点路径 

一、实验目标

输入一个无向图(n、m和m条边)和起点sx和终点fx,输出从起点x出发到终点y的所有路径。

要求每条路径的每个顶点只经过一次。

输入格式

  • 第一行顶点数n、边数m、起点sx、终点fx
  • 接下来m条边,每行两个数x和y

输出格式

  • 每行一条路径,用空格隔开顶点
  • 最后输出路径总数

输入样例

5 7 2 3
1 2
1 3
1 5
2 4
3 4
3 5
4 5

输出样例

2 1 3 
2 1 5 3 
2 1 5 4 3 
2 4 3 
2 4 5 1 3 
2 4 5 3 
6

数据范围:1<=n、m<=10

二、分析

1、思路

首先建图,本例用vector

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用下面的代码来求解两点间的所有路径: #include <iostream> #include <vector> using namespace std; // 定义矩阵的行和列 #define ROW 10 #define COL 10 // 记录路径的结果 vector<pair<int,int> > path; // 定义矩阵 int maze[ROW][COL] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // 判断路径是否有效 bool isValidPath(int x, int y) { if(x < 0 || x >= ROW || y < 0 || y >= COL || maze[x][y] != 0) return false; return true; } // 打印路径 void printPath() { for(int i=0; i < path.size(); i++) { cout << "(" << path[i].first << ", " << path[i].second << ") "; } cout << endl; } // 找到从起点到终点的所有路径 void findAllPaths(int x, int y) { // 判断是否到达终点 if(x == ROW-1 && y == COL-1) { path.push_back(make_pair(x, y)); printPath(); path.pop_back(); return; } // 判断路径是否有效 if(isValidPath(x, y)) { // 把当前点加入到路径中 path.push_back(make_pair(x, y)); // 尝试按照不同的方向前进 findAllPaths(x+1, y); findAllPaths(x, y+1); findAllPaths(x-1, y); findAllPaths(x, y-1); // 回溯 path.pop_back(); } } // 主函数 int main() { // 先把起点加入到路径中 path.push_back(make_pair(0, 0)); // 从起点开始尝试找到所有的路径 findAllPaths(0, 0); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值