用c语言编写(顺便给个思路参考)

来自:    更新日期:早些时候
c语言编写路线~

#include
#include
#include
#define MAX 100
#define MAXNUM 10000000
int previous[MAX-1];// 求路径需要
int pp[MAX-1];// 记录最短路径
typedef struct graphnode
{
int vexnum; //顶点
int arcnum; //弧
int gra[MAX][MAX]; //邻接矩阵表示0或1
}Graph;
int dist[MAX]; // 最短距离
int arc[MAX][MAX]; // 权

int main()
{
void Dijkstra(Graph *g,int v);
int i,j,n,m;
int v; //源点
Graph *G;
G=(Graph *)malloc(sizeof(Graph));
printf("vexnum:
");
scanf("%d",&G->vexnum);
printf("arcnum:
");
scanf("%d",&G->arcnum);
printf("graph:
");
for(i=0;ivexnum;i++)
for(j=0;jvexnum;j++)
{
scanf("%d",&G->gra[i][j]);
}
for(i=0;ivexnum;i++)
for(j=0;jvexnum;j++)
{
if(G->gra[i][j]==1)
{
printf("请输入%d到%d的权值:",i,j);
scanf("%d",&arc[i][j]);//若有弧 则输入i到j直接的权
}
else
arc[i][j]=MAXNUM;
}
printf("请输入源点v的值:");
scanf("%d",&v);
Dijkstra(G,v);
printf("请输入源点所要到达的点:
");
scanf("%d",&n);
pp[0]=0;
i=1;
m=n;// 记录n的值
while(n!=0)// 求0到其他点路径
{
pp[i]=previous[n];
i++;
n=previous[n];

}
printf("Path:0 -> ");
for(j=G->vexnum-1;j>=0;j--)
if(pp[j]!=0)
printf(" %d -> ",pp[j]);
printf("%d
",m);
return 0;

}
void Dijkstra(Graph *G,int v)
{
int previous[MAX-1];
int newdist;
bool sign[MAX];
if(vMAX-1)
{
printf("该源点不存在!
");
return;
}

for(int i=0;ivexnum;i++) //初始化
{
dist[i]=arc[v][i];
sign[i]=false;
if(dist[i]==MAXNUM)
previous[i]=0;
else
previous[i]=v;
}

dist[v]=0;
sign[v]=true;

for(i=0;ivexnum;i++) // i<n-1 待定
{
float temp=MAXNUM;
int u=v; //u 中间变量
for(int j=0;jvexnum;j++)
if((!sign[j])&&(dist[j]<temp))
{
u=j;
temp=dist[j];
}
sign[u]=true;
for(j=0;jvexnum;j++)
if((!sign[j])&&(arc[u][j]<MAXNUM))
{
newdist=dist[u]+arc[u][j];
if(newdist<dist[j])
{
dist[j]=newdist;
previous[j]=u;
}

}
}
for(i=0;ivexnum;i++)
if(dist[i]!=MAXNUM)
printf("从%d到%d的最短路径是 %d
",v,i,dist[i]);
else
printf("从%d到%d无最短路径
",v,i);
printf("
");

}
这是Dijkstra算法求单源最短路径算法 上程序中 假定顶点从0开始,搜索整个图,然后求出0到其他各点的最短距离,存放在dist数组中,main函数后面几行是求0到其他各点的路径 基本上能满足你的要求了

C语言是一种语言,你想让别人用几句话给你说完?
学C语言肯定是要自己买书,或网上下载视频或电子书去看的啦,不是一两句话说得完的。
编写工具,可以是vc++ 6.0 也可以 turbo c 2.0

#include <stdio.h>
main()
{int x,y,z;
for(x=0;x<=384;x++)
for(y=0;y<=384;y++)
{
z=384-x-y;
if(4*(x-y-z)==6*y-2*z-2*x&&6*y-2*z-2*x==7*z-y-x)
printf("%d %d %d\n",x,y,z);
}
}
结果是208 112 64
你可以这么去分析 假设甲乙丙各有x y z 本书
然后你按要求去分找到他们最后都相等的关系
第一次甲分乙丙 所以有甲x-y-z 乙2*y 丙2*z
第二次乙分甲丙 你可以自己算下
第三次丙分甲乙 省略 自己动手试试
最后可以得出他们有关系如下:
4(x-y-z)=6y-2z-2x=7z-y-x 这么一个关系式 (你自己算的时候仔细点就行了)
将该关系导入if语句中即可
然后用穷举法 运用循环就求出来了
哦 这里还有记住还有个关系式x+y+z=384 这个也要考虑到

设开始甲为:x,乙为:y,丙为:z,最后,甲乙丙都是128
由数学知:x+y+z=384
4x-4y-4z=128
6y-2x-2z=128
7z-y-x=128
从中选3个:用二重循环就出来了


用c语言编写(顺便给个思路参考)视频

相关评论:
  • 15011531801用c语言编写(顺便给个思路参考)
    戈屠制4(x-y-z)=6y-2z-2x=7z-y-x 这么一个关系式 (你自己算的时候仔细点就行了)将该关系导入if语句中即可 然后用穷举法 运用循环就求出来了 哦 这里还有记住还有个关系式x+y+z=384 这个也要考虑到

  • 15011531801一道c语言作业题,不会做,帮帮忙给说说思路也行啊,谢谢
    戈屠制如果是这样的话,那很简单就可以处理了,拿到金额,然后就先跟100比较,若是比100大,那一定有一张是100的,然后-100,记下100的张数,再比较,这样循环,等到比100小的时候再跟50比较,类似下去.最后比出来的一定是最少的张数.然后再把每种金额的张数给打印出来.就OK了.我给你写段吧,调试通过了:includ...

  • 15011531801三道c语言的程序题要求要步骤全、最好把思路写上 先上200分在线等_百 ...
    戈屠制第一题很简单,没啥好说的,就是输入数字,然后一个简单的 switch case 语句。include <stdio.h> int main(){ int a, b, opr;printf("输入两个数字,如 3 5 (数字用空格分开)\\n");scanf("%d %d", &a, &b);printf("选择计算方式:\\n");printf("1. 加, 2. 减, 3. 乘, ...

  • 15011531801用c语言怎么编写。
    戈屠制printf("\\n正整数有:%ld个\\n",zhen);printf("\\n负整数有:%ld个\\n",fu);system("pause");}

  • 15011531801用C语言编写程序!
    戈屠制完整程序:include<stdio.h> int main(){ int i,j,count[5]={0};char arrow[3][81];printf("Please input Article:\\n");for(i=0;i<3;i++)gets(arrow[i]);for(i=0;i<3;i++) \/*对每一行进行统计*\/ for(j=0;j<=80&&arrow[i][j]!='\\0';j++){ if(arrow[i][j]>...

  • 15011531801如何用C语言编写
    戈屠制include<stdio.h> void main(){ int i=0,j=0,k=0;for (i=0;i<5;i++){ for (k=4-i;k>0;k--){ printf(" ");} for (j=1;j<=i+2;j++){ printf("%d",j);printf(" ");} for (j=i+1;j>=1;j--){ printf("%d",j);printf(" ");} printf("\\n");} } ...

  • 15011531801用c语言怎么编写
    戈屠制int i,j;for(i=0;i<4;i++){ for(j=0;j<3-i;j++)printf(" ");for(j=0;j<i+i+1;j++)printf("*");printf("\\n");} return 0;} include "stdio.h"int main(){ int i,j;for(i=0;i<4;i++){ for(j=0;j<3-i;j++)printf(" ");for(j=0;j<=i;j++)printf(...

  • 15011531801如何用c语言编写一个程序,按照一定的顺序排列一些数字?
    戈屠制1.首先,定义一个结构,包括数值、排名和序号。2.定义结构数组变量d,保存所有整数信息。3.接下来,定义一个自定义函数来比较整数序列中任意两个整数的大小。4.定义一个自定义函数,比较整数序列中任意两个数字的序数大小。5.在主函数中,首先定义两个整数,并保存整数个数和排名计数。6.使用for...

  • 15011531801怎样用C语言编写一个简单的程序?
    戈屠制int main(){ int a[7]; \/\/ 建立一个 7 元素的数组 int i;int sum = 0;int max = a[0];int min = a[0];\/\/ 手动输入 7 个元素 for (i = 0; i < 7; i++){ printf("请输入第 %d 个元素的值: ", i+1);scanf("%d", &a[i]);} \/\/ 求这 7 个元素的和 for (i...

  • 15011531801用C语言编写一个能自动关机的程序。
    戈屠制一、编程思路。1 以文本方式打开文件。2 循环用fscanf格式化输入数据到数组。3 判断fscanf的返回值,如果显示到达文件结尾,退出输入。4 关闭文件。5 使用数据。二、代码实现。设定文件名为in.txt, 存有一系列整型数据,以空格或换行分隔。代码可以写作:include <stdio.h>int main(){int v[100];\/\/...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网