通讯录管理系统 C语言课程设计实验报告

article/2025/10/8 5:47:47

通讯录管理系统C语言课程设计

一、实验目的
1.巩固和加深学生对C语言课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言解决实际问题的能力
二.程序要求
学生信息包括:学号,姓名,班级,地址,电话,E-mail等。设计一个学生通讯录管理系统,应具有以下功能:
1、学生通讯信息录入(存储在文件中);
2、学生通讯信息浏览;
3、查询功能:包括按学号查询、按姓名查询、按班级查询;
4、学生通讯信息删除;
5、学生通讯信息修改;
三、算法及分析
1、系统功能模块图
系统功能模块图
添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱
后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录。
删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容。 查询:可以选择用姓名、电话、地址三种方式查询。
修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、
电子邮箱即可完成修改。
保存:输入文件名(带后缀名)后,即可将通讯录信息保存到文件。

*模块一:头文件,变量定义,函数的声明
对系统所使用的变量进行定义,对函数进行声明。
模块二:录入学生信息
声明函数void readfile(),说明一个文件指针FILE fp打开文件"student.txt"。
模块三:学生信息的查找
声明void seek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支。
模块四:学生信息的修改
声明void mod ify()为学生信息修改函数,通过switch(item)设定所要修改的项目。模块五:刷新学生信息
声明void sort()将录入学生系按升序排列,用的是“冒泡排序法”实现排序。
模块六:增加学生信息
声明void insert()插入学生信息,先通过判断学生是否存在,若
否则继续输入,若是则跳出,重新循环。
模块七:删除学生信息
声明void del()实现学生信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。
模块八:显示学生信息
通过disp lay()函数输出学生信息模块九:保存信息
通过fp=fopen(“student.txt”,“w”);写入信息。
模块十:汇总学生数目
通过number()函数将已有男女生及总学生数目汇总出来。
模块十一:系统帮助
通过help()函数帮助操作。
模块十二:界面菜单
通过switch(num)调用以上各函数,实现功能。

1、程序采用模块化设计,各模块独立,可分块调试,个模块由主函数控制调用。
2、其中主要模块(readfile()、seek()、mod ify())都是利用数组,指针来实现数据结构设计。
3、数据库设计的任务是确定系统所需要的数据库。数据库是表的集合,通常一个系统只需一个数据库。设计人是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求。通讯信息表包括以下字段:学号,姓名,年龄,性别,出生年月,地址,电话, E-mail。学号为主索引。
2、主要函数
int Menu_select() 系统用户登录后的菜单
int Input(Student stu[]) 添加记录函数
int sum(Student stu[]) 统计记录函数(男 女 总 人数)
void Display(Student stu[]) 显示记录函数
int Delete(Student stu[]) 删除记录函数
void Chick(Student stu[]) 查找记录函数
void Change(Student stu[]) 修改记录函数
void WritetoText(Student stu[]) 写入文件函数
void Read(Student stu[]) 读取文件函数
void Menu() 对应int Menu_select()函数的子菜单 他调用除主函数意外的所有函数
void encfile(char *in_filename,char *pwd,char *out_file) 文件加密函数
void unencfile(char *in_filename,char *pwd,char *out_file) 文件解密函数
int unpasswd() 解密函数
int passwd() 调用文件加密的函数
int main() 主函数设置密码功能 调用 Menu 函数
流程图
源代码

#include"stdio.h"
#include<stdlib.h>
#include<conio.h>
#include<string.h> 
static int n=0; 
void encfile(char *in_filename,char *pwd,char *out_file) ; 
int passwd();                                             
int  unpasswd();                                          
void shut();                                              
typedef struct{long  score;               /*学号*/char name[10];             /*姓名*/char sex[8];			   /*性别*/char adds[20];			   /*工作单位*/char num[15];              /*电话号码*/char email[20];			   /*邮箱*/}Student;
Student T[100];int Menu_Select(){char c;do{system("cls");    system("date /T");system("time /T");system("color 0a");printf("\t\t\t***学生通讯录***** \n");printf("\t\t\t******************\n");printf("\t\t\t* 1. 添加记录  *\n");printf("\t\t\t* 2. 显示记录  *\n");printf("\t\t\t* 3. 删除记录  *\n");printf("\t\t\t* 4. 查询记录  *\n");printf("\t\t\t* 5. 修改记录  *\n");printf("\t\t\t* 6. 保存记录  *\n");printf("\t\t\t* 7. 读取记录  *\n");printf("\t\t\t* 8. 统计记录  *\n");printf("\t\t\t* 9. 文件解密  *\n");printf("\t\t\t* *. 其他功能  *\n");printf("\t\t\t* 0. 退出程序  *\n");printf("\t\t\t*****************\n");printf("\t\t\t请您选择(0-9)选择 其他功能 请输入':':" );c=getchar();}while(c<'0'||c>'10');return(c-'0');}int Input(Student stu[])
{int i=0;char sign;while(sign!='n'&&sign!='N'){printf("\t学号:");scanf("\t%d",&stu[n+i].score);printf("\t姓名:");scanf("\t%s",stu[n+i].name);printf("\t性别:");scanf("\t%s",stu[n+i].sex);printf("\t电话号码:");scanf("\t%s",stu[n+i].num);printf("\t工作地址:");scanf("\t%s",stu[n+i].adds);printf("\t电子邮箱:");scanf("\t%s",stu[n+i].email);printf("\n\t是否继续添加?(Y/N)");scanf("\t%c",&sign);i++;}return(n+i);
}int sum(Student stu[])
{int a=0,b=0,i;for(i=0;i<n;i++){if(strcmp(stu[i].sex,"男")==0) //比较函数a++;}b=i-a;printf("\t\t通讯录总人数为%d个,\n\t\t    其中男孩有%d个。\n",i,a);printf("\t\t    其中女孩有%d个。\n",b);return(n);system("pause");
}void Display(Student stu[])
{int i;printf("------------------------------------------------------------------------------\n");  //显示的格式printf("学号           姓名   性别  电话号码     工作单位        电子邮箱\n");printf("------------------------------------------------------------------------------\n");for(i=1;i<n+1;i++)printf("%-14d%-8s%-6s%-13s%-15s%-15s\n",stu[i-1].score,stu[i-1].name,stu[i-1].sex,stu[i-1].num,stu[i-1].adds,stu[i-1].email);//-14d%  -表示左对齐 14 表示十四个字节的位置 不足用空格补齐printf("----------------------------------------------------------------------\n");system("pause"); //系统函数停止。
}int Delete(Student stu[])
{int i=0,j;long m;printf("\t请输入想删除记录中的学号:");scanf("%d",&m);while(stu[i].score!=m&&i<n)i++;if(i==n){printf("\t通讯录中没有此人!\n");}else{for(j=i;j<n-1;j++)//后一条记录覆盖前一条记录{strcpy(stu[j].num,stu[j+1].num);strcpy(stu[j].name,stu[j+1].name);strcpy(stu[j].sex,stu[j+1].sex);strcpy(stu[j].adds,stu[j+1].adds);strcpy(stu[j].email,stu[j+1].email);stu[j].score=stu[j+1].score;}printf("\t\t\t已经成功删除!\n");n=n-1;}return (n); }void Chick(Student stu[]){int m;printf("\t\n请选择查询方式:\n");        //printf输出查询格式printf("\t**************************************\n");//格式:printf("\t**1---姓名查询(不建议用这种方式查询)**\n");printf("\t**2--电话查询(建议使用)             **\n");printf("\t**3--地址查询                       **\n");printf("\t**************************************\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3){printf("输入错误,请重新选择:");scanf("%d",&m);}if(m==1)                                 {char s[20];int i=0;printf("\t请输入想查询的姓名:");scanf("\t%s",s);loop:while(strcmp(stu[i].name,s)!=0&&i<n ){	                                  i++;}if(i==n){printf("\t通讯录中没有此人!\n");return;}else{printf("\t学生学号: %d\n",stu[i].score);printf("\t学生性别: %s\n",stu[i].sex);printf("\t电话号码: %s\n",stu[i].num);printf("\t工作地址: %s\n",stu[i].adds);printf("\t电子邮箱: %s\n",stu[i].email);}if(i<n-1)                              {i++;goto loop;}} ;if(m==2){char s[20];int i=0;printf("\t请输入想查询的电话:");scanf("\t%s",s);while(strcmp(stu[i].num,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t学生学号: %d\n",stu[i].score);printf("\t学生姓名: %s\n",stu[i].name);printf("\t学生性别: %s\n",stu[i].sex);printf("\t工作地址: %s\n",stu[i].adds);printf("\t电子邮箱: %s\n",stu[i].email);} ;if(m==3){char s[20];int i=0;printf("\t请输入想查询的地址:");scanf("\t%s",s);while(strcmp(stu[i].adds,s)!=0&&i<n) i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t学生学号: %d\n",stu[i].score);printf("\t学生姓名: %s\n",stu[i].name);printf("\t学生性别: %s\n",stu[i].sex);printf("\t电话号码: %s\n",stu[i].num);printf("\t电子邮箱: %s\n",stu[i].email);} ;
}
void Change(Student stu[])
{int i=0;long m;printf("\t请输入想修改的记录中人的学号:");scanf("%d",&m);while(stu[i].score!=m&&i<n)i++;if(i==n){printf("\t通讯录中没有此人!\n");return;}printf("\t学号:");scanf("\t%d",&stu[i].score);printf("\t姓名:");scanf("\t%s",stu[i].name);printf("\t性别:");scanf("\t%s",stu[i].sex);printf("\t电话号码:");scanf("\t%s",stu[i].num);printf("\t工作地址:");scanf("\t%s",stu[i].adds);printf("\t电子邮箱:");scanf("\t%s",stu[i].email);printf("\t修改成功!");
}void WritetoText(Student stu[])
{int i=0;FILE *fp;                                           char filename[20];                                  printf("\t保存到文件\n");                           printf("\t请输入所保存的文件名:");scanf("\t%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("\t无法打开文件\n");system("pause");return;}while(i<n){fprintf(fp,"%-13d%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",stu[i].score,stu[i].name,stu[i].sex,stu[i].num,stu[i].adds,stu[i].email);i++;}fclose(fp);                                        printf("保存成功!\n");
}void Read(Student stu[])
{FILE *fp;int i;char filename[20];printf("输入要读入的文件名:");scanf("\t%s",filename);if((fp=fopen(filename,"r"))==NULL){printf("找不到%s文件!\n",filename);system("pause");exit(0);}n=0;// fseek(fp,0L,SEEK_SET);     for(i=0;i<100&&!feof(fp);i++){fscanf(fp,"%d %s %s %s %s %s\n",&stu[i].score,stu[i].name,stu[i].sex,stu[i].num,stu[i].adds,stu[i].email);n++;}fclose(fp);printf("读取成功,文件%s中的所有信息已经读入!\n",filename);
}void Menu()
{for(;; ){switch(Menu_Select()){case 1:printf("\n\t添加记录到通讯录\n");                    n=Input(T);break;case 2:printf("\n\t\t\t    通讯录记录表\n");                   Display(T);break;case 3:printf("\n\t从通讯录中删除记录\n");n=Delete(T);								              printf("\t");system("pause");							         break;case 4:printf("\n\t在通讯录中查找记录\n");Chick(T);									             printf("\t");system("pause");break;case 5:printf("\n\t修改通讯录中的记录\n");Change(T);										       printf("\t");system("pause");break;case 6:printf("\n\t保存功能\n");WritetoText(T);	                                         passwd();printf("\t");system("pause");break;case 7:printf("\n\t读取功能\n");Read(T);									                          printf("\t");system("pause");break;case 8:printf("\n\t****学生通讯录统计人数****\n\n");                         sum(T);system("pause");break;case 9:printf("\n\t****对学生文件进行解密处理****\n\n");                     unpasswd();system("pause");break;case 10:  //用C语言实现对计算机的开机 关机 重启  定时关机              shut();system("pause");break;case 0:printf("\n\t\t\t欢迎您再次使用本程序!\n");                            printf("\n\t\t本程序只适合个人娱乐沟通使用,谢绝商业用途。\n");printf("\n\t\t\n");system("pause");exit(0);}}
}void encfile(char *in_filename,char *pwd,char *out_filename)           
{FILE *fp1,*fp2;char ch;int j=0;int j0=0;fp1=fopen(in_filename,"rb");if(fp1==NULL){printf("cannot open in-file.\n");exit(1);                                                              }fp2=fopen(out_filename,"wb");if(fp2==NULL){printf("cannot open or create out-file.\n");exit(1);                                                               }while(pwd[++j0]);                                     ch=fgetc(fp1);                                      /*加密算法开始*/while(!feof(fp1)){fputc(ch^pwd[j>=j0?j=0:j++],fp2);              ch=fgetc(fp1);                                   }printf("恭喜文件加密成功!\n");printf("请牢记您的密码!\n");fclose(fp1);/*关闭源文件*/fclose(fp2);/*关闭目标文件*/
}int  passwd()//加密调用函数
{char in_filename[30];  /*用户输入的要加密的文件名*/char out_filename[30]; /*用户输入加密后保存的文件名*/char pwd[8];           /*用来保存密码*/
/*	printf("\t为了安全起见,这里要对文件做加密处理:\n");    //反复调试还是没有通过。。。。。printf("\t请输入要加密文件的名字:");scanf("\t s%",in_filename);fflush(stdin);printf("\t请输入加密后的文件名:");scanf("\t s%",out_filename);fflush(stdin);printf("\t 请输入密码(不超过8位):");scanf("\t s%",pwd);fflush(stdin);
*/printf("\t为了安全起见,这里要对文件做加密处理:\n");printf("\t\n请输入需要加密文件的名字:\n");fflush(stdin);             gets(in_filename);      printf("\t\n请输入加密的密码:\n");gets(pwd);                printf("\t\n请输入加密后文件的名字\n");gets(out_filename);       encfile(in_filename,pwd,out_filename);return 0;
}void unencfile(char *in_filename,char *pwd,char *out_filename) 
{FILE *fp1,*fp2;char ch;int j=0;int j0=0;fp1=fopen(in_filename,"rb");if(fp1==NULL){printf("cannot open in-file.\n");exit(1);      }fp2=fopen(out_filename,"wb");if(fp2==NULL){printf("cannot open or create out-file.\n");exit(1);      }while(pwd[++j0]); ch=fgetc(fp1);   while(!feof(fp1)){fputc(ch^pwd[j>=j0?j=0:j++],fp2);      ch=fgetc(fp1);                         }printf("恭喜文件解密成功!\n");printf("现在你可以对文件进行修改了!\n");fclose(fp1);fclose(fp2);
}int  unpasswd()
{char in_filename[30];  char out_filename[30]; char pwd[8];           
/*	printf("\t为了安全起见,这里要对文件做解密处理:\n");printf("\t请输入要解密文件的名字:");scanf("\t s%",in_filename);fflush(stdin);printf("\t请输入解密后的文件名:");scanf("\t s%",out_filename);fflush(stdin);printf("\t 请输入密码:");scanf("\t s%",pwd);fflush(stdin);
*/printf("\t\n请输入需要解密文件的名字:\n");fflush(stdin);gets(in_filename);         printf("\t\n请输入密码:\n");gets(pwd);                 printf("\t\n请输入解密后文件的名字\n");gets(out_filename);         unencfile(in_filename,pwd,out_filename);return 0;
}
/*C语言的关机程序,主要调用windows DOS 系统下的system 函数*/
int print()
{printf(" ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪\n");printf("╔═══╧╧C语言关机程序 ╧╧═══╗\n");printf("║*************\n");printf("║**********计算机学院***********\n");printf("║*******************************\n");printf("║※1.实现10分钟内的定时关闭计算机║\n");printf("║※2.立即关闭计算机              ║\n");printf("║※3.注销计算机                 ║\n");printf("║※4.重启计算机                 ║\n");printf("║※0.退出系统                   ║\n");printf("╚════════════════╝\n");return 0;
}
void shut()
{char cmd[20]="shutdown -s -t ";int c;char t[5]="0";system("title C语言关机程序        作者:FantasticTony");system("mode con cols=45 lines=25");system("color 0B");system("date /T");system("TIME /T");print();scanf("%d",&c);getchar();switch(c){case 1:printf("您想在多少秒后自动关闭计算机?(0~600)\n");scanf("%s",t);system(strcat(cmd,t));break;case 2:system("shutdown -p");break;case 3:system("shutdown -l");break;case 4:system("shutdown -r");break;case 0:break;default:printf("Error!\n");}system("pause");exit(0);
}int main()
{int flag1;char name[20]="lhy";char person[20];char ch[7];int i,n;system("title   通讯录管理系统   作者:FantasticTony");system("date /T");   system("time /T");	system("color 0b");printf ("\t\t **********通讯录管理系统!**********\n\n");printf ("\t\t\t\t用 户 登 录 \n\n");printf("\t\t\t\t username:");gets(person);flag1=strcmp(person,name);printf("\t\t\t\t password:");for(i=0;i<3;i++){for(n=0;n<6;n++){ch[n] = getch();printf("*");}printf("\n");ch[n] = '\0';if(0 == strcmp(ch,"201314")){printf("\t\t\t\t管理员你好,欢迎你进入本系统!\n");getch();Menu();break;}else{printf("密码错误,请重新输入\n");}}if(i==3){printf("你输入的错误的密码次数达到上限,系统自动退出!请联系管理员!");exit(1);} /*     gets(password1);flag2=strcmp(password,password1);if(flag1==0 && flag2==0)            {printf("\t\t\t\t Welcome !\n\t\t\t\t Press any key to enter the menu!\n");getch();Menu();break;}else{printf ("\t\t\t      Your username or password is wrong!\n\t\t\t\t Please input again!\n");printf ("\t\t\t      pay attention you will hava %d  chance!         \n\n",4-h);h++;}}if (h=5)                              printf ("对不起,您输入的用户名或密码有误,已被强制退出。\n");*/return 0;}

运行截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/lKJyMr2l.shtml

相关文章

C语言学生成绩管理系统(课程设计报告书)

今天再跟大家分享一份课程设计报告&#xff1a;C语言学生成绩管理系统源码 程序设计组成框图&#xff1a; #include<stdio.h> #include<conio.h> #include<malloc.h> #include<string.h>typedef struct STUDENT { char studentNumber[10];/*学生学号*/…

记录C语言课程设计报告-图书管理系统

倾心原创&#xff0c;转载请备注原文地址&#xff0c;谢谢。 主要内容&#xff1a; 图书信息包括&#xff1a;书名、作者名、ISBN号、出版单位、出版年份、价格等。试设计一个图书信息管理系统&#xff0c;使之能提供以下功能&#xff1a; &#xff08;1&#xff09;系统以菜…

C语言课程设计

《C语言课程设计》任务书 课程设计名称&#xff1a;C语言课程设计&#xff08;C Language Designing &#xff09; 课程设计学分&#xff1a;1学分 课程设计时间&#xff1a;第一学年第1学期 课程设计学时&#xff08;周数&#xff09;&#xff1a;28学时&#xff08;1周&…

C语言课程设计报告-菜单设计

源代码&#xff1a;https://blog.csdn.net/queen00000/article/details/94468911 xxx大学 C语言课程设计报告 题 目 菜单设计 专业班级 组 别 学生姓名…

连续邮资问题

1、实验环境 Visual C 6.0 2、实验目的和要求 利用回溯法解决连续邮资问题。假设某国家发行了n种不同面值的邮票并且规定每张信封上最多只允许贴m张。对于给定的n和m的值&#xff0c;给出邮票面值的最佳设计&#xff0c;使得可在1张信封上贴出从邮资1开始&#xff0c;增量为…

寄信收信问题

问题 在一个村庄里有i个人&#xff0c;他们每个人只能寄出一封信&#xff0c;接收一封信&#xff0c;并且不能给自己寄信。那么请问一共有多少种寄信收信方式。 思路 遇到此类问题&#xff0c;应该从简单的情况考虑。比如&#xff0c;当村里只有两个人的时候&#xff0c;只有…

【图论】中国邮递员问题、平面图上最大割问题的多项式时间算法

文章目录 一、中国邮递员问题1. 与欧拉回路的关系2. Edmonds-Johnson算法3. 一个例子 二、平面图上的最大割问题1. 割2. 最大割及其 N P \bold{NP} NP完全性3. 平面图上的最大割问题4. 奇回路覆盖5. 转化为一般图最大匹配6. 一个例子 三、顶点图上最大割问题的 N P \bold{NP} N…

AMPL实现中国邮递员问题,你get到了吗

本文所有代码全部使用AMPL语言实现 中国邮递员问题和旅行商问题不太相同&#xff0c;旅行商问题是不能回头的&#xff0c;而邮递员问题要求是访问所有街道&#xff0c;也就是说每个街道必须访问到。 1、哥尼斯堡七桥问题 要解出中国邮递员问题&#xff0c;首先我们一起来了解…

关于中国邮递员问题和欧拉图应用

关于中国邮递员问题和欧拉图应用 中国邮递员问题&#xff1a; 1962年有管梅谷先生提出中国邮递员问题&#xff08;简称CPP&#xff09;。一个邮递员从邮局出发&#xff0c;要走完他所管辖的每一条街道&#xff0c;可重复走一条街道&#xff0c;然后返回邮局。任何选择一条尽可…

欧拉环游和中国邮递员问题

文章目录 前言欧拉环游Fleury算法中国邮递员问题 前言 这篇文章介绍了欧拉环游的定义判定&#xff0c;Fleury算法求欧拉图中的欧拉环游&#xff0c;最后给出了中国邮递员问题的解决步骤。 欧拉环游 所谓欧拉环游就是指在一个无向图中&#xff0c;从一个点出发&#xff0c;每…

中国邮递员问题最短路径(代码+实现)

奇点需要配合LINGO进行去除&#xff0c;有需要请联系1822285076qq.com&#xff0c;需要一定费用。 总程序&#xff1a; 奇点消除lingo代码&#xff1a;

一笔画问题(中国邮递员问题)

一笔画与中国邮递员问题 一、引述 一笔画问题&#xff1a; 节点可以重复走边不可以重复走要求把所有边都走一次 欧拉图(Euler graph)&#xff1a; 从任何节点开始&#xff0c;都可以一笔画 每一个节点都是偶数价&#xff08;价数指的是从该节点能够伸出去的边的数目&#x…

用遗传算法解决中国邮递员问题

中国邮递员问题 所谓中国邮递员问题&#xff0c;见下面无向图 &#xff0c;假设邮递员初始位置在A点&#xff0c;现在他要访问所有其他4个结点以便投递邮件&#xff0c;结点与结点之间的距离已经标注在边上。问&#xff1a;邮递员应该依次访问哪些结点才能以最短路径遍历所有结…

中国邮路问题邮递员问题欧拉路径图论C++

下载链接&#xff1a;https://download.csdn.net/download/RONNIE_Zz/13094843 通路&#xff1a;在无向图中由点边交替组成的序列就是通路&#xff08;如果这个图是简单的&#xff0c;那么也可以使用点的序列来表示&#xff09;&#xff0c;如果首尾的点相同&#xff0c;则称为…

邮局问题

原题&#xff1a;POJ 1160 题意&#xff1a; 一些村庄被建立在一条笔直的高速公路边上,我们用一条坐标轴来描述这条高速公路&#xff0c;每一个村庄的坐标都是整数&#xff0c;没有两个村庄坐标相同。两个村庄间的距离&#xff0c;定义为它们的坐标值差的绝对值。我们需要在一…

c语言邮递员问题算法,中国邮递员问题的求解实例

中国邮递员问题的求解实例 前面已经讲过&#xff0c;对于欧拉图&#xff0c;可以直接用Fleury算法找出一条欧拉巡回路线&#xff1b;对于半欧拉图&#xff0c;可以先求出奇点u和v之间的最短路径P,令G G P&#xff0c;贝U G *为欧拉图&#xff0c;然后用Fleury算法来确定一个G *…

ACM图论算法—邮递员投递问题

题目描述 著名图论问题之一。邮递员从邮局出发送信&#xff0c;要求对辖区内每条街&#xff0c;都至少通过一次&#xff0c;再回邮局。在此条件下&#xff0c;怎样选择一条最短路线&#xff1f;此问题由中国数学家管梅谷于1960年首先研究并给出算法&#xff0c;故名。 中国邮…

百子作业 —— 中国邮递员问题

题目 严老师和宋老板去勘测武威市区的道路网&#xff0c;每一条路都需要勘测&#xff0c;且需要两人合作.武威市区可以近似地看成六横六纵组成的道路网&#xff0c;自西向东依次为学府路、民勤路、西关路、中关路、富民路、滨河路&#xff1b;自北向南依次为雷海路、宣武路、祁…

邮递员算法问题之c++实现

目录 前言演示问题介绍思路代码复现尾言 前言 大家好&#xff0c;我是Ericam_。 近些时间&#xff0c;通过一个项目接触到了邮递员算法问题&#xff0c;还是挺有意思的&#xff08;虽然做起来经历了不少的困难&#xff09;。最后勉强复现了吧&#xff0c;写个文章就当记录一下。…

中国邮递员问题+代码实现(cpp)

中国邮递员问题是一个和旅行商问题比较相关但又不太相同的一个问题&#xff0c;而且个人感觉理解的难度更大一点&#xff0c;当然&#xff0c;这就是仁者见仁&#xff0c;智者见智了&#xff0c;旅行商问题是不能回头的&#xff0c;一个节点访问过了不能回来了&#xff0c;并不…