c语言编写路线

   更新日期:2024.05.02
#include <stdio.h>
#include <malloc.h>
#include<stdlib.h>
#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:\n");
scanf("%d",&G->vexnum);
printf("arcnum:\n");
scanf("%d",&G->arcnum);
printf("graph:\n");
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
{
scanf("%d",&G->gra[i][j]);
}
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;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("请输入源点所要到达的点:\n");
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\n",m);
return 0;

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

for(int i=0;i<G->vexnum;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;i<G->vexnum;i++) // i<n-1 待定
{
float temp=MAXNUM;
int u=v; //u 中间变量
for(int j=0;j<G->vexnum;j++)
if((!sign[j])&&(dist[j]<temp))
{
u=j;
temp=dist[j];
}
sign[u]=true;
for(j=0;j<G->vexnum;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;i<G->vexnum;i++)
if(dist[i]!=MAXNUM)
printf("从%d到%d的最短路径是 %d\n",v,i,dist[i]);
else
printf("从%d到%d无最短路径\n",v,i);
printf("\n");

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

一,UNIX下C语言的学习路线。
工具篇
  “公欲善其事,必先利其器”。编程是一门实践性很强的工作,在以后的学习或工作中,将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具。
  (一)操作系统
  在UNIX或Linux系统中学习C很方便,所以在开始的学习旅程前请先选择一个UNIX或Linux操作系统。
  目前可供个人免费使用的UNIX或Linux系统有FreeBSD、RedHat Linux、SUSE Linux等,而且在安装包中还提供很多实用的工具,如:gcc, make等。
  如果您一直使用Windows,身边又没有多余的机器安装UNIX,则可以使用VMware,通过VMware安装虚拟系统。
  (二)编译工具
  目前绝大多数Unix或Lnux系统都提供CC或GCC编译器,最简单的cc命令格式如下:
  cc -o hello hello.c
  在unix shell环境中敲入上面的代码会将hello.c程序编译成可执行文件hello。
  make 工具如 GNU make、System V make 和 Berkeley make 是用来组织应用程序编译过程的基本工具,但是每个 make 工具之间又有所不同。
  大部分UNIX和Linux程序都是通过运行make来编译的。make工具会读取一个包含指令的文件(这个文件的名字通常都是 makefile 或 Makefile,不过后文中统一称之为 “makefile”),并执行各种操作来编译程序。
  (三)调试工具
  最简单的调试工具:为程序添加打印语句
  在对程序的运行机制有了一定的了解后,可以实用一些工具帮助进行调试,当然得学习一下这些工具得使用,如:dbx,gdb等。
  还有一些内存工具可以帮查找内存泄漏或缓冲区溢出等一些问题,如:memwatch,yamd等
  (四) 其他工具
  1. vi或vim
  Unix下文本编辑器。主要靠一堆命令来编辑文本文件,学Unix编程最好熟悉并熟练使用vi编辑器。
  当然在实际工作中,可能需要一个集成编码环境或一个功能强大的图形化编辑工具。
  2.netterm
  最著名的网络终端软件之一,可以使用它方便的连接到主机系统中。
  3.Secure shell
  一个支持ssh协议得客户端工具,多数情况下用来连接linux系统。
书籍篇
  “书是人类进步得阶梯”。学习一门新的知识,当然要选择几本适合自己得书籍,下面介绍一些我自己学习C语言使用过的书籍:
  1.《C primer plus》
  推荐理由:适合作为入门书和基本函数查询得参考资料。本书最新版为第五版,以ANSI C99为标准详细介绍了C语言。
  2.《The C programming_Language》
  推荐理由:C语言之父得作品权威性毋庸置疑。虽然书籍出版时间比较老,好像也没更新,不过仍不失为经典书籍,网上有这本书得英文电子版提供下载。
  3.《C 专家编程》
  推荐理由:本书可以帮助有一定经验的C程序员成为C编程方面的专家,最关键的是本书寓教于乐,充分享受编程的乐趣。
  4.《C缺陷与陷阱》
  推荐理由:书中所揭示的知识能帮助绕过C语言自身得陷阱和缺陷,减少代码中许多常见的Bug。
  5.《unix环境高级编程》
  推荐理由:既然是UNIX环境下C编程,就不得不说说UNIX编程书籍。Stevens先生的《unix环境高级编程》是竭力推荐的,也是案头必备(如果对网络编程有兴趣的,可以学习一下Stevens先生的《UNIX网络编程》两卷,如果觉得还不过瘾,可以再看看《TCP/IP详解》三卷)。
  6.《计算机编程艺术》
  推荐理由:算法大师得呕心沥血之作。计划出版五卷书,目前好像已出版3卷。对算法有兴趣得可以研究一下。
过程篇
  1.学习C语法
  语法的学习对于一个具有编程底子的来说,就很轻松了;即使以前没有学习过其他编程语言,我相信有2个星期,也能轻松搞定。
  需要注意的是,不要太纠缠于语言的细节,比如:运算符优先级与结合性的问题等。
  2.学习C标准库
  ANSI C库把函数分为不同的组,每个组都具有与之相关的头文件。C语言标准库相对于其他语言,比如C++,Java来说是非常短小精悍的,但首先应着重对以下库进行学习:
  ctype.h:字符处理
  math.h:数学库
  stdio.h:标准I/O库
  stdlib.h:通用工具库
  string.h:字符串处理
  time.h:时间和日期
  如果想了解完成的ANSI C库,可以购买相关的书籍,这些书籍一般会详细介绍每个函数的用户和一些注意点;
  3.攻克C的难点
  C语言声明:
  C语言的声明确实觉得恐怖,比较晦涩难懂,而且声明的形式和使用的形式还类似。比如如下的声明恐怕就连很多熟悉C多年的程序员也不是一眼就能看出来的:
  char * const * (*next)();
  那么有没有一种好的记忆方法或规则来搞清楚呢,好像没有,如果有的话也不是这样折磨人了。不过可以看看《C专家编程》第三章的内容,或许会有所收获。
  也只能多学多练了,所谓熟能生巧嘛,希望这个问题不要在你的心灵上留下阴影。
  数组与指针:
  数组与指针的关系,在标准中并没有作很详细的规定,而且好多C入门的书籍在这个问题上并没有给出很详细的说明,所以会给人造成很多误解。
  对于这个问题,可以参考《C缺陷与陷阱》4.5节和《C专家编程》第4,9,10章,相信这里面的内容搞透彻,以后就不会再被这个问题搞迷惑。
  指针与内存:
  如果以后编写规模较大的程序,可能发现这个问题可能会是最大的烦恼,而且可能会是消耗最多调试时间的事项。
  C版本的问题:
  得特别小心该问题,最好不要的程序中混合使用不同版本C的特性,否则会带来很迷惑的问题。如果一定要用,最好清楚自己在做什么。
  4. UNIX环境编程
  学习了以上内容之后,就可以进行unix环境编程了。不过可能需要对操作系统理论有一点点的了解,这样学起来会比较轻松一些。
  Unix环境编程,应该着重IO和进程两大块内容。《Unix环境高级编程》中对Unix环境编程有着非常详细且深入的论述,而且书中有大量实用性例子程序,不过可能得花上几个月得时间,好好啃一啃了。
  在扎实掌握以上内容,不代表得C语言学习支路已经完成,相反,才刚刚开始。以后需要用学到得知识去解决大量不同实际问题,在不断得实践过程中,会近一步加深对C的理解。有了以上基础之后,会发现,在实践过程中需要的其他知识,会非常快速的掌握。
  二,Windows程序员的学习路线
  1.当然要熟悉下C语言了 入门可以选用潭浩强的 《C程序设计》(当然最好能读C Programming Language)特别要对其中的指针,结构体等东西一定要搞清楚了(要学好的很好至少要花费一个月时间) 为什么要从C开始呢: C好学 大多数的操作系统核心部分是用C开发的 C的效率高且语言成熟
  2.在1的基础之上一定要认真学习一下数据结构 对C++程序员来说良好的数据结构可以让一个程序员很轻松的完成程序设计 糟糕的数据结构可以把一个程序员累死 推荐书籍:严蔚敏的《数据结构(C语言版)》或北京大学的一本中C++版的数据结构 书中说到的每个主体在程序设计中都会用到 认真学好会对的以后的C++程序设计有太多的好处 (3个月时间)
  3.学好了2之后可以学习下《C++ PROGRAM DESIGN》这本书初步介绍了C++和如何使用C++写出Windows下的程序(要学好至少要花费3个月时间)
  4.在3的基础之上可以读一本叫《Windows 95 程序设计》(它的最新版本是Programming Windows)这是一相Windows程序设计的领域的不朽之作(3个月时间) 通过2和3的学习已经成为了一个可以设计Windows程序的程序员了 要想更好的设计Windows程序设计 一定要借助框架结构不可 为什么:框架结构可以加快我们程序设计的速度 虽然使用框架使得我们的程序的效率低了那么一点 但随着当今计算机的运算能力的提升,不会感觉到这一点点的性能损失的反而会因为你使用的框架结构而使你的程序设计加快了速度 使用框架结构才算一个真正的VC++程序员
  5.在4的基础之上可以看一些简单的MFC程序设计的书比如《Visual C++入门教程》之类的图书 这可以使你能写出一些带有通用控件的MFC程序 (1个月时间)
  6.在5的基础之上已经可以很快开发一个软件了 但不了解MFC框架运行机制是很不好的 了解MFC的运行机制可以使以后的MFC程序设计工作做的更好 推荐书籍侯杰的《深入浅出MFC》 但这本书真的不适合初学者当你有了一定的开发经验以后这本书对来说确实很好 若很熟悉Windows下的SDK程序设计并打算或已经开始使用MFC进行软件开发 那这本书对来说再好不过了 (2个月时间)
  7.在6的基础之上可以看下这本书《VC++技术内幕》由潘爱民译的 推荐看原著(3个月)
  8.在以上基础之上为了更好的使用VC++这个工具 推荐看一下《VC++6.0宝典》(3个月) 从开发工具的角度讲这本书写的很好
  9.为了更好的工作可以参考一下VC++程序设计百例
  10.之后可以看一下《Windows核心编程》 这本书很好的讲解了Windows的编程 对你写系统程序很有好处的 推荐看原版
  11.只了解其形不算真正的了解 之后还要认真的读一下Windows的内核源码 相信WRK 很容易找到的 可以配合《深入解析Windows操作系统》《Windows内核原理与实现》和《Windows内核情景分析》
  12.其它一些东东《COM原理》(潘爱民) OpenGL D3D VC的数据库编程 图形图像 音视频处理和网络都要有所了解和会使用
  13.要做到一个好的程序员一定要对驱动程序有所了解所以写一个文件驱动之类的东东是很有必要的
  14.经过以上各步的学习完全成为一个优秀的Windows程序员了(前提是每一步要学好)
  15.漏了一些重要的东东 编译原理 汇编及 组成原理 和设计模式等也是很重要的东东 只有学好了这些才能明白语言为什么要这样组织才能高效。

这是图论问题
dijkstra,floyd算法,数据结构书上有的

  • 13053815460 :c语言编写路线
    邓德竹3393 :答:include <stdio.h> include <malloc.h> include<stdlib.h> define MAX 100 define MAXNUM 10000000 int previous[MAX-1];// 求路径需要 int pp[MAX-1];// 记录最短路径 typedef struct graphnode { int vexn...
  • 13053815460 :小车能按事先规划的路线行驶的c语言程序编写
    邓德竹3393 :答:includeintmain(void){intrepeat,ri;intminutes,seconds;doublecost,mile;scanf("%d",&repeat);for(ri=1;ri=10){cost=(mile-10)*3+24;}elseif(3<=mile){cost=(mile-3)*2+10;}else{cost=10;}printf("cost=%...
  • 13053815460 :给c语言初学者的良心建议大学生来看
    邓德竹3393 :答:第一点: 选择主流编程开发软件 比如VS Code,C-Free,VS,QT等。都是编程软件:这些软件都是用于编写、调试和运行计算机程序的工具。支持多种编程语言:这些软件都支持多种编程语言如C、C++、Java、Python等等。集成了调试器:...
  • 13053815460 :数据结构与算法作业:用C语言编程随机生成一个迷宫,然后找出从入口到出...
    邓德竹3393 :答:1.本程序是动态的,运行后自动寻找迷宫出路 2.本程序对C语言刚学完的有很大的意义.3.四周是墙,坐标(1,1)是入口,右下脚是出口 声明:本程序用VC调试是无法通过的需要修改 本程序调试工具是TC...include "graphics.h"...
  • 13053815460 :用c语言编写一个简单程序,实现地铁两点计费问题,并打印路线
    邓德竹3393 :答:1、创建一个站点类 成员包括站点名称char 和站点里程数int 2、创建计费函数 根据两站点间里程数差值计算相应票价 3、主函数中初始化各个站点名称和站点里程 输入选择的两个站点类 输出两个站点名称和票价 ...
  • 13053815460 :求大神发一个c语言写的代码 公交路线的查询 具体要求【用户能够方便查询...
    邓德竹3393 :答:define CHK_BY_BUS_ID 1 define CHK_ERROR (-1)define MAX_LINE_ID 50 define MAX_BUS_NUM 10 typedef struct { char bus_id[16];//公交车车牌号 unsigned char running_state;//运营状态,是收车...
  • 13053815460 :编程新手必备!如何入门编程,看这里就够了!
    邓德竹3393 :答:推荐学习路线:从严谨的Pascal语言开始,再到灵活的C语言,最后探索VC等更多编程语言。每一步都为你铺平道路,让你在编程的世界里游刃有余!书籍推荐C语言书籍推荐:谭浩强老师的著作,绝对是你学习C语言的最佳伙伴!实践出真知实践出...
  • 13053815460 :C语言可以用于模拟随机的行进路线吗???
    邓德竹3393 :答:2、第一,假设用X表示移动物体,这个可以列出可能的物体集合,然后使用随机算法抽取其中一个;3、第二,使用Floyd算法。Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向...
  • 13053815460 :C语言大一新生设计简易塔防游戏,想实现绘制路线的目的,想通过键盘上...
    邓德竹3393 :答:绘制的话,当然现在说的是c语言的debug调试窗口的方法,等到后面学到其它编程就可以用面向对象的方法了 好了,先说这个,,如果是用printf绘图,那么你把你地图放到一个二维数组里面,两级for循环打印就行了 清除就用system(...
  • 13053815460 :编程学习路线
    邓德竹3393 :答:第二步,把C语言学好,可以不要求精通,但是一定要掌握的全面一点。C语言的编码软件很多,比如borland C,网上很多,百度可以找到。C++第三步,c++。可以先接触Borland C Builder V6.0。学习的教材有 “C++程序设计谭浩强100%25完整·清华...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网