7-7 六度空间 (30分)

“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。

图1 六度空间示意图
“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时通信等工具,能够体现社交网络关系的一手数据已经逐渐使得“六度空间”理论的验证成为可能。

假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。

输入格式:
输入第1行给出两个正整数,分别表示社交网络图的结点数N(1<N≤10
​3
​​ ,表示人数)、边数M(≤33×N,表示社交关系数)。随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个结点的编号(节点从1到N编号)。

输出格式:
对每个结点输出与该结点距离不超过6的结点数占结点总数的百分比,精确到小数点后2位。每个结节点输出一行,格式为“结点编号:(空格)百分比%”。

输入样例:
10 9
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
输出样例:
1: 70.00%
2: 80.00%
3: 90.00%
4: 100.00%
5: 100.00%
6: 100.00%
7: 100.00%
8: 90.00%
9: 80.00%
10: 70.00%

分析:Floyd算法求最短路径的板子题、

#include<bits/stdc++.h>
using namespace std;
int g[1002][1002];
int inf=1e8;
int main(){
	int n,m;scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			g[i][j]=inf;
		}
	}
	for(int i=1;i<=m;i++){
		int p1,p2;scanf("%d%d",&p1,&p2);
		g[p1][p2]=g[p2][p1]=1;
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(g[i][j]>g[i][k]+g[k][j]){
					g[i][j]=g[i][k]+g[k][j];
				}
			}
		}
	}
	
	for(int i=1;i<=n;i++){
		int sum=0;
		for(int j=1;j<=n;j++){
			if(g[i][j]<=6){
				sum++;
			}
		}printf( "%d: %.2lf%\n",i,sum/(n*0.01));
	}
} ```

### 关于六自由度机械臂3-5-3多项式插值轨迹规划 #### 3-5-3多项式的定义与特性 对于六自由度机械臂而言,在关节空间内的轨迹可以被描述为一系列的时间函数。这些时间函数通常通过不同阶数的多项式来表示,以满足特定的速度和加速度边界条件。具体来说,3-5-3段多项式意味着整个运动过程为三个阶段: 1. **初始加速阶段**:采用三阶多项式表达,能够平滑启动并达到预定的最大速度。 2. **恒定速度阶段**:利用五阶多项式构建,确保在整个行程中心保持匀速移动的同时允许适当调整。 3. **减速停止阶段**:再次使用三阶多项式完成平稳降速直至完全静止。 这种组合方式不仅有助于减少冲击力,还能有效提高系统的响应性能[^2]。 #### MATLAB实现示例 下面给出一段简单的MATLAB代码片段用于展示如何创建这样的轨迹规划模型。此代码假设已知起点位置`q0`、目标位置`qd`以及期望总耗时`t_total`作为输入参数。 ```matlab function [t, q, dq, ddq] = plan_trajectory(q0, qd, t_total) % 定义各时间段比例因子 alpha = 0.2; beta = 0.6; % 计算各个时段的具体长度 ta = alpha * t_total; tb = (beta-alpha)*t_total; tc = (1-beta)*t_total; % 初始化输出数组 n_points = 1000; dt = linspace(0,t_total,n_points); q = zeros(n_points, length(q0)); dq = q; ddq = q; for i=1:length(dt) t = dt(i); if t<=ta % 初始加速期 - 使用三阶多项式 a = polyval([-(6*q0)/(ta^3)+(6*qd)/(tb*tc), ... (7*q0)/(ta^2)-(8*qd)/(tb*tb)+... (qd)/(tc*tc),(q0)/ta+(qd)/(tb)], t); b = polyder(a); c=polyder(b); elseif t>ta && t<=(ta+tb) % 中间匀速期 - 应用五阶多项式 s=(t-ta)/tb; p=[s.^5,-5*s.^4+5*s.^3]; dp=[5*s.^4,-20*s.^3+15*s.^2]/tb; ddp=[20*s.^3,-60*s.^2+30*s]/tb/tb; A=[polyval(p,[0;1]);polyval(dp,[0;1])]; B=[q0;qd]; X=A\B; a=X(1,:).*p'; da=sum(X.*dp'); dda=sum(X.*ddp'); else % 减速停稳期 - 再次调用三阶多项式 r=(t-(ta+tb))/tc; g=[r.^3,r.^2,r]; dg=[3*r.^2,2*r,ones(size(r))]/tc; ddg=[6*r,2*ones(size(r))]/tc/tc; C=[polyval(g,[0;1]);polyval(dg,[0;1])]; D=[qd;q0]; Y=C\D; a=Y(1,:).*g'; da=sum(Y.*dg'); dda=sum(Y.*ddg'); end q(i,:) = a'; dq(i,:) = da'; ddq(i,:) =dda'; end end ``` 上述脚本实现了完整的3-5-3多段式轨迹生成逻辑,并返回了对应时刻的位置(`q`)、速度(`dq`)及加速度(`ddq`)数据序列以便后续析或驱动实际设备运行[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值