寻找路径数目

题意输入包含多个测试用例输入0退出测试。吉米将每个十字路口或加入的路径从1开始编号。他的办公室是编号1,他的房子是编号2。每个测试用例的第一行是十字路口的数量N,1 < N≤1000,和路径数量的M。接下来的M行线每个包含路口a、b和整数距离1≤d≤1000000表示的道路长度d。吉米可以走任何他选择的道路。任一对十字路口之间最多有一个路径

思路:建map数组,应用深度优先搜索找出路径条数。

#include<iostream>
 #include<queue>
 using namespace std;
 typedef struct n1
 {
     int  distens,flog;
 }node;
 node N[1005];
 int map[1005][1005],k;
 int direct[1005];
 void set(int n)
 {
     int i,j,m,n1,n2,d;
     for(i=1;i<=n;i++)
     {
         for(j=1;j<=n;j++)
         {
             map[i][j]=-1;
         }
          N[i].distens=10000000;N[i].flog=0;direct[i]=0;
     }
  
     cin>>m;
     while(m--)
     {
         cin>>n1>>n2>>d;
         if(map[n1][n2]!=0||map[n1][n2]>d)
         map[n1][n2]=map[n2][n1]=d;
     }
 }
 void spfa(int n)
 {
     queue<int> Q;
     int now;
     int i;
      N[2].distens=0;N[2].flog=1;
     Q.push(2);
     while(!Q.empty())
     {
         now=Q.front();
         Q.pop();
         N[now].flog=0;
         //if(q.x==1)break;
         for(i=1;i<=n;i++)
         if(map[now][i]!=-1)
         {
             if(N[i].distens>N[now].distens+map[now][i])
             {
                 N[i].distens=N[now].distens+map[now][i];
                 if(N[i].flog==0)
                 {
                     N[i].flog=1;
                     Q.push(i);
                 }
             }
         }
     }
 }
 int DFS(int now,int n)
 {
     int i;
     if(direct[now]>0)
     return direct[now];
     if(now==2)
     {
         return 1;
     }
     for(i=1;i<=n;i++)
     if(map[now][i]!=-1&&N[now].distens>N[i].distens)
     {
         direct[now]+=DFS(i,n);
     }
  
    return direct[now];
 }
 int main()
 {
     int n;
     while(cin>>n&&n)
     {
         set(n);
         spfa(n);
         k=DFS(1,n);
       cout<<k<<endl;
     }
 }


### 使用MATLAB实现最优逃生路径算法 为了在MATLAB中实现计算最优逃生路径算法,可以借鉴修正社会力模型的思想[^2]。该方法能够有效模拟行人之间的相互作用及其与环境的交互,从而优化疏散过程中的路径选择。 #### 1. 定义基本参数和初始条件 首先定义一些必要的变量,比如行人的位置、速度、目标方向等: ```matlab % 初始化行人参数 numPeople = 50; % 行人数目 positions = rand(numPeople, 2); % 随机初始化行人位置 (x,y) velocities = zeros(numPeople, 2); % 初始速度设为零 desiredSpeed = 1.34; % 平均步行速度 m/s targetPositions = ones(numPeople, 2) * [8, 8]; % 所有人的目标位置相同 ``` #### 2. 构建障碍物和其他静态元素 创建表示墙壁或其他不可穿越物体的数据结构: ```matlab walls = [ [0, 0], [10, 0]; [10, 0], [10, 10]; [10, 10], [0, 10]; [0, 10], [0, 0]]; doors = [[5, 0]]; % 出口坐标 ``` #### 3. 社会力模型的核心方程 根据文献描述的社会力公式更新每位行人的加速度向量: \[ \vec{a}_i(t)=\alpha[\vec{v}_{des,i}-\vec{v}_i]+\sum_{j≠i}\beta e^{-r_{ij}/d_0}(\hat{n}_{ji})+\gamma e^{-(R_i+R_j-r_{ij})/b}(cosθ_{ji})\] 其中: - \( v_{des,i} \): 第 i 名行人的期望移动速度; - \( r_{ij}, R_i,R_j \): 分别代表两人间距离和个人半径大小; - \( n_{ji}, θ_{ji} \): j 对 i 的单位法线矢量及夹角; 这些系数可以根据具体应用场景调整其取值范围。 #### 4. 更新函数 编写用于迭代更新每个人的位置和速度的循环体: ```matlab for t = 1:maxSteps forces = calculateForces(positions, velocities); accelerations = forces ./ masses; newVelocities = velocities + dt .* accelerations; positions = positions + dt .* newVelocities; plotSimulation(walls, doors, positions); end ``` 此处 `calculateForces` 和 `plotSimulation` 是自定义辅助函数,前者负责按照上述公式计算总外力,后者用来可视化当前时刻所有对象的状态变化情况。 #### 5. 结果评估 最后可以通过统计各次试验得出平均所需时间和成功率等方式衡量所设计系统的性能优劣程度,并据此进一步改进算法逻辑或参数设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值