18 软专

一个长度为n的非负整型双向队列的“加权和”定义如下:
(1)依次从队列头或尾取一个数,共取n次。
(2)第i次取出的数乘以系数i得到加权数。
(3)将n个加权数求和,即为该队列的“加权和”。
编写函数,计算给定一个长度为n的非负整型双向队列的“加权和”的最大值。(双向队列可以用一维数组或链表表示)。

思路:贪心算法,每次选两端最小的。因为要求最大值就得让较小数乘较小系数,较大数乘较大系数。


int jqh(int a[],int n)
{
	int i=0;//左指针
	int j=n-1;//右指针
	int sum=0;//加权和
	int k=1;//权重
	while(i<=j)  //使用贪心算法每次寻找当前最小数去乘权重
	{
		if(a[i]>a[j])
		{
			sum=sum+a[j]*(k++);
			j--;
		}
		else
		{
			sum=sum+a[i]*(k++);
			i++;
		}
	}
	return sum;
}

用n*n的矩阵表示有向图,有边值为1,无边值为0.
编写函数,给定节点i和步长k,计算节点i经k步能到达的所有节点。

int n;
int visited[maxsize];
int print[maxsize];
void dfs(int d[maxsize][maxsize],int i,int k)
{
	visited[i]=1;
	if(k==0)  //距离起点已经k步
	{
		if(print[i]==0) //未输出过
		{
			printf("%d",i);
			print[i]=1;
		}
		visited[i]=0;//回溯时要还原
		return;
	}
	else
	{
		for(int j=0;j<n;j++)
		{
			if(d[i][j]==1&&visited[j]==0)
			{
				dfs(d,j,k-1);
			}
		}
	}
	visited[i]=0;  //回溯时要还原
}

什么是堆栈?什么是队列?请分别给出堆栈和队列具体应用的实例。
堆栈是一种操作受限的线性表,它只允许在一端进行插入,删除,和访问操作,通常将进行插入,删除,访问的一端称为栈顶,另一端称为栈底。堆栈又称为后进先出的线性表。
队列也是一种操作受限的线性表,它只允许在表的一端进行插入,在表的另一端进行删除,允许删除的一端被称为队头,允许插入的一端被称为队尾。队列也被称为先进先出的线性表。
堆栈 :括号匹配,递归。
队列:层次遍历。

设G=(V,E)是一个连通图,已知图中两个顶点i,j,请设计一个算法给出从顶点i到顶点j的所有简单路径。

typedef struct Arcnode
{
	int adjvex;
	struct Arcnode *nextarc;
}Arcnode;
typedef struct Vnode
{
	int data;
	Arcnode *firstarc;
}Vnode;
typedef struct graph
{
	Vnode adjlist[maxsize];
	int n,e;
}graph;
int path[maxsize];
int visit[maxsize];
void DFS(graph g,int v,int to,int d)//v是当前节点,to是目标节点,d是从开始到现在的距离
{
	visit[v]=1;
	path[++d]=v;//存入路径
	if(v==to&&d>0)  //如果当前结点就是目标结点
	{
		for(int i=1;i<=d;i++)
			printf("%d ",path[i]);
	}
	else
	{
      Arcnode *p=g.adjlist[v].firstarc;//p指向当前结点的第一个邻接结点
	  while(p!=NULL)
	  {
		  if(visit[p->adjvex]==0)
		  {
			  DFS(g,p->adjvex,to,d);
		  }
		  p=p->nextarc;
	  }
	}
	visit[v]=0;
}
void SimplePath(graph g,int i,int j)
{
  DFS(G,i,j,0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值