⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emrpc.cpp

📁 路由选择过程的c算法程序 与DSR 只是简单地使用最短路径不同
💻 CPP
字号:
// EMRPC.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "math.h"

//计算节点i一次成功传输前的重传次数
int fun_re_trans(int Nre_trans_i);
//计算第i条路径能量权重 
float fun_Wenergy(float Ptx_i,float Eremain_i,float Prx_i_1,float Eremain_i_1,int Nre_trans_i);
//计算第i条路径的队列权重
double fun_Wqueue(int Nqueue_i);
//EMRPC路径算法,计算路径权重
double fun_EMRPC();

int main(int argc, char* argv[])
{
	printf("Hello World!\n");
	printf("%f",fun_EMRPC());
	return 0;
}

/************************************************************************/
/*计算节点i一次成功传输前的重传次数                                     */
/************************************************************************/
int fun_re_trans(int Nre_trans_i){
	return 1+Nre_trans_i;
}
/************************************************************************/
/*计算第i条路径能量权重                                                 */
/************************************************************************/
float fun_Wenergy(float Ptx_i,float Eremain_i,float Prx_i_1,float Eremain_i_1,int Nre_trans_i){
	return (Ptx_i/Eremain_i+Prx_i_1/Eremain_i_1)*fun_re_trans(Nre_trans_i);
}
/************************************************************************/
/*计算第i条路径的队列权重                                               */
/************************************************************************/
double fun_Wqueue(int Nqueue_i){
	return log(1+Nqueue_i);
}
/************************************************************************/
/*EMRPC路径算法                                                         */
/************************************************************************/
double fun_EMRPC(){
	//a,b 是用来平衡Wenergy和Wqueue的权重因子
	float a,b;
	//设定权重因子
	printf("请输入平衡Wenergy和Wqueue的权重因子a和b\n");
	printf("a:");
	scanf("%f",&a);
	printf("b:");
	scanf("%f",&b);
	//路径数n
	int n;
	printf("请输入路径数目n:");
	scanf("%d",&n);
	//EMRPC算法参数定义
	float Ptx_i;//节点i的发射消耗能量
	float Eremain_i;//节点i的剩余能量
	float Prx_i_1;//下一跳节点的接收消耗能量
	float Eremain_i_1;//下一跳节点的剩余能量
	int Nre_trans_i;//节点i在上一次成功传输前的重传次数
	int Nqueue_i;//节点i的队列长度
	//W是计算所得的路径权重
	double W=0;
	for (int i=1;i<=n;i++)
	{
		printf("计算第%d条路径权重\n",i);
		printf("计算第%d条路径的能量权重Wenergy\n",i);
		printf("输入第%d条路径的能量权重参数:\n",i);
		printf("Ptx_%d(节点%d 的发射消耗能量):",i,i);
		scanf("%f",&Ptx_i);
		printf("Prx_%d_1(下一跳节点的接收消耗能量):",i);
		scanf("%f",&Prx_i_1);
		printf("Eremain_%d(节点%d的剩余能量):",i,i);
		scanf("%f",&Eremain_i);
		printf("Eremain_%d_1(下一跳节点的剩余能量):",i);
		scanf("%f",&Eremain_i_1);
		printf("Nre_trans_%d(节点%d在上一次成功传输前的重传次数):",i,i);
		scanf("%d",&Nre_trans_i);
		printf("计算第%d条路径的队列权重Wqueue\n",i);
		printf("输入第%d条路径的队列权重参数:\n",i);
		printf("Nre_trans_%d(节点%d的队列长度):",i,i);
		scanf("%d",&Nqueue_i);
		W+=a*fun_Wenergy(Ptx_i,Eremain_i,Prx_i_1,Eremain_i_1,Nre_trans_i)+b*fun_Wqueue(Nqueue_i);
	}
	return W;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -