1. 设计河北师范大学的校园平面图,至少包括15个以上的地点,每两个地点间可以有不同的路,且路长可能不同。以图中顶点表示校内各地点,存放名称、代号、简介等信息;用边表示路径,存放路径长度等相关信息。

2.提供图中任意地点相关信息的查询。

  1. 提供图中任意地点的问路查询,即查询任意两个地点之间的一条最短路径。

  2. 学校要新建一间超市,请为超市选址,实现总体最优。注意要考虑各地点距离超市的远近,以及大家去超市的频度不同。

#include <stdlib.h>
#include <stdio.h>
#define N 16 //图的顶点的数量typedef struct place{char* name;//名称int codename;//代号char* introduction;//简介double frequncy;//去超市的频率
}place,mall;//创建地点
//place---buildingstypedef struct path{int length;char pathName[10];int start;//开始节点的坐标int finish;int turn[N];int index;
}path;typedef struct Map{//  place p[N+1];//顶点的类型path arcs[N+1][N+1];//distance from one to anotherint vernum,arcnum;}Map;//给图加入路径长度
void initMap(Map *mapp,int distance,int start,int finish){mapp->arcs[start][finish].length=distance;mapp->arcs[finish][start].length=distance;
}
void initplace(place *p,int codename,char name[10],char introduction[100],double fre){p->name=name;p->codename=codename;p->introduction=introduction;p->frequncy=fre;
}void initfrequency(place *p,double e){p->frequncy=e;
}
void printMap(Map p){printf("the Adjacency matrix is as follows");int i,j;for(i=0;i<p.vernum;i++){for(j=0;j<p.vernum;j++){//遍历以上的二维矩阵if(p.arcs[i][j].length==-1){printf("#\t");}else{printf("%d\t",p.arcs[i][j]);}}printf("\n");}printf("The adjacency matrix is printed successfully\n");printf("the num of paths in the map is %d \n",p.arcnum);printf("the num of places in this map is %d\n",p.vernum);
}
// mappp.arcs[k][j]是最原始的邻接矩阵
void flody(Map mappp,int newmap[N][N])
{int k, i, j;for (k = 1; k <= N; k++)//在n个结点中依次找中转站;{for (i = 1; i <= N; i++){for (j = 1; j <= N; j++){newmap[i][j]=mappp.arcs[i][j].length;if(mappp.arcs[i][k].length <1000&& mappp.arcs[k][j].length<1000){//如果中转点存在if (mappp.arcs[i][j].length > mappp.arcs[i][k].length + mappp.arcs[k][j].length)//如果直接从i到j的距离大于从i到k再到j的距离,即找到一个合适的中转站,就更新地图;{mappp.arcs[i][j].length = mappp.arcs[i][k].length + mappp.arcs[k][j].length;newmap[i][j]=mappp.arcs[i][j].length;}}}}}//对角线元素是0for (int i=1; i<=N; i++){for (int k=1; k<=N; k++){if (i==k){newmap[i][k]=0;}}}}int main()
{//4-------4double weigh;double minpp;int mallp;int mall,dis,start4;double w[N+1];//4-----------4//1-----------------1int i,start,finish;double j;place placep[N+1];//1----------------------1int placenum;//3-------------------3int newmap[N][N];int minp,minum,cnt,f;int n;int startp,finishp,turn; int pathp[N];//1.设计平面图//1.1创建地点的结点//各个地点的信息组成的数组//initplace(placep[1],1,'qizhi1','grilshome');initplace(placep[2],2,'qizhi2','girlshome');initplace(placep[3],3,'qizhi3','girlshome');for(i=1;i<=N;i++){j=0.0;initplace(&placep[i],i,"name","introduction",j);}Map mapp;//邻接矩阵的初始化操作for(start=1;start<=N;start++){for(finish=1;finish<=N;finish++){mapp.arcs[start][finish].length=-1;}}for(i=1;i<=N;i++){for(j=1;j<=N;j++){initMap(&mapp,0x3f3f3f3f,i,j);}}//1.2创建路径initMap(&mapp,6,1,9);initMap( &mapp,7,9,15);initMap( &mapp,4,1,8);initMap(&mapp,1,7,8);initMap( &mapp,4,7,11);initMap(&mapp,2,7,12);initMap(&mapp,6,1,6);initMap(  &mapp,1,1,2);initMap(&mapp,3,2,3);initMap( &mapp,2,3,5);initMap(&mapp,4,3,4);initMap( &mapp,2,5,13);initMap(&mapp,6,4,14);initMap(&mapp,4,4,10);initMap(&mapp,1,10,14);initMap(&mapp,6,9,1);initMap( &mapp,7,15,9);initMap( &mapp,4,8,1);initMap(&mapp,1,8,7);initMap( &mapp,4,11,7);initMap(&mapp,2,12,7);initMap(&mapp,6,6,1);initMap(  &mapp,1,2,1);initMap(&mapp,3,3,2);initMap( &mapp,2,5,3);initMap(&mapp,4,4,3);initMap( &mapp,2,13,5);initMap(&mapp,6,14,4);initMap(&mapp,4,10,4);initMap(&mapp,1,14,10);initMap(&mapp,6,1,16);initMap(&mapp,6,16,1);
//    2.1 相关信息的查询操作printf("现在进入查询,请输入想要查询的地址代号,(输入范围是%d~%d)\n",1,N);scanf("%d",&placenum);printf("您查询的地点代号是%d,名称是%s,简介是%s,去超市的频率是%f",placep[placenum].codename,placep[placenum].name,placep[placenum].introduction,placep[placenum].frequncy);//3.1问路查询printf("现在进入问路查询界面,请您按照2 4的形式输入起点和终点的地址代号 (输入范围是%d~%d)比如4 14\n",1,N);//输入1、 2、 3 ~ N之类的代号flody(mapp,newmap);//存放最短路径turn=0;n=N;while(n){pathp[n--]=0;}scanf("%d %d",&startp,&finishp);printf("从地点%d到地点%d的最短路径为%d\n",startp,finishp,newmap[startp][finishp]);printf("路径如下所示:\n");minp=100;//寻找最短路,先假设这条路径长度最大,经过每一个点后更新长度,最后长度等于最短路minum;cnt=2;f=startp;//f是已经确定的最短路经过的点,在f的邻接点中找到点minum,使得newmap[first][f]+map[f][minum]+newmap[minnum][last]=最短路while(minp>=newmap[startp][finishp]){for (i=1;i<=N;i++){if ((newmap[startp][f]+mapp.arcs[f][i].length+newmap[i][finishp])<=minp){minum=i;minp=newmap[startp][f]+mapp.arcs[f][minum].length+newmap[minum][finishp];}}f=minum;pathp[cnt++]=minum;if (minum==finishp){break;}}printf("%d ",startp);pathp[cnt]=finishp;for(i=1; i<cnt; i++){if (pathp[i]!=pathp[i-1] && pathp[i]!=0){printf("%d ",pathp[i]);}}printf("\n");//    printf("%d\n",mapp.arcs[startp][finishp].index);
//    printf("%d\n",mapp.arcs[startp][finishp].turn[mapp.arcs[startp][finishp].index]);
//    if(mapp.arcs[startp][finishp].turn[mapp.arcs[startp][finishp].index]!=0)//当有中转点的时候
//    {//        printf("%d-->",startp);
//        for(int i=1; i<mapp.arcs[startp][finishp].index; i++)
//        {//            printf("%d",mapp.arcs[i][finishp].turn[mapp.arcs[i][finishp].index]);
//            if( i<=mapp.arcs[startp][finishp].index ) printf("-->");
//
//        }
//        printf("%d",finishp);
//    }
//    else{//        printf("%d-->%d",startp,finishp);
//    }
//    printf("\n");//之前写的place placep[N+1];//各个地点的信息组成的数组//4.1超市选址initfrequency(&placep[6],0.9);initfrequency(&placep[2],0.1);for(mall=1;mall<=N;mall++){w[mall]=0;};for(mall=1;mall<=N;mall++){weigh=0;//mall是新超市的所在建筑的代号for(start4=1;start4<=N;start4++){dis=newmap[start4][mall];if(start4==mall) dis=0;weigh+=dis*placep[start4].frequncy;
//                printf("%lf %d %d %lf\n",placep[start].frequncy,mall,dis,weigh);}w[mall]=weigh;// printf("%lf\n",w[mall]);}mallp=1;minpp=w[mallp];for(int i=1;i<=N;i++){if(minpp>w[i]){minpp=w[i];mallp=i;}}
printf("超市建在代号为%d的位置最好",mallp);system("pause");return 0;}

数据结构超市选址、最短路径查询、地址信息查询相关推荐

  1. 中间件——利用Axis 2 进行Web service开发(中英文双向翻译,中国邮政编码--地址信息查询)

    问题描述: 1.利用Java Swing 或SWT 开发一桌面应用程序 2.应用程序中集成以下网站提供的的Web服务:http://www.webxml.com.cn/zh_cn/web_servic ...

  2. ip地址信息查询入口,附key

    分享一个查询ip地址信息的接口 http://apis.haoservice.com/lifeservice/queryIpAddr?ip=60.12.8.29&key=047c10b650e ...

  3. java m查询_信息查询系统,基于SSM框架的JAVA系统

    今天和一个朋友共同完成了一个信息查询系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架.我这个朋友知识有限,只会这个框架,哈哈,都是为了方便他.和往常一样选用简单又便捷的MYECLIP ...

  4. 99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?

      网   工   圈 网络工程师阿龙圈内最早的公益公众号,本号已认证!学网络关注我一个就够了(关注近5w+)关注听说99%的网工都来这里充电吖关注我,一个老HCIE(编号3558)带你轻松玩网络技术 ...

  5. mac地址信息查询站点

    局域网内网收***~查ip,查mac,找元凶 一.常见mac地址厂商: 00-15-5D开头-------Hyper-V虚拟机 00-0C-29开头-------VMWare WorkStation虚 ...

  6. 根据ip地址查询地址信息

    用的是http://ip.taobao.com/service/getIpInfo.php接口. 这个也是网上找的,但是我已经修改测试过了,是可用的,在这里先感谢原作者. package com.ro ...

  7. 计算机查询硬盘信息,查询电脑硬件信息的方法

    电脑硬件,包括电脑中所有物理的零件,以此来区分它所包括或执行的数据和为硬件提供指令以完成任务的软件. 电脑硬件主要包含:机箱,主板,总线,电源,硬盘,存储控制器,界面卡,可携储存装置,内置存储器,输入 ...

  8. mysql查询个人信息查询_MySQL:基础查询

    MySql:基础查询 语法: SELECT 要查询的东西 [FROM 表名]; 类似于Java中 :System.out.println(要打印的东西); 特点: ①通过select查询完的结果 ,是 ...

  9. iPhone 信息查询汇总 [搬运]

    信息 地址 可降级版本 http://api.ineal.me/tss/status 爱思助手 微信小程序 "iOS降级查询" 设备信息查询 https://www.theipho ...

最新文章

  1. CSS3弹性盒模型之box-orient box-direction
  2. JVM(3):Java GC算法 垃圾收集器
  3. java session创建_request创建session
  4. Nginx的几个常用配置和技巧
  5. python链接mysql系统结构设计_第11章:使用Python打造MySQL专家系统
  6. nginx优化配置选项
  7. Docker上部署WebERP系统,开源ERP框架
  8. 接收list参数_Python 犄角旮旯--List
  9. mysql 备份 没有自动删除文件_删掉spfile在没有自动备份控制文件下从以前的rman备份中恢复数据库...
  10. C#和VB.net代码转换工具
  11. Google浏览器任务栏图标变白
  12. vPro里面的v代表什么意思?
  13. 高并发场景下,库存问题解决方案
  14. 201421410013 唐昭靖 作业1
  15. 《王者荣耀游戏服务器架构演进(完整版)》读后感
  16. HDU1234 开门人和关门人【水题】
  17. matlab 改变数据,MATLAb怎么实现对表格数据的修改
  18. 浅谈资金发展投资行业的发展路径
  19. 电脑网络连接不上怎么办
  20. 一张图了解NFT堆栈,关于NFT生态现状,你知道哪些项目?

热门文章

  1. 中介变量有3个维度应该怎么分析
  2. 你能在腾讯问问上发软文吗?
  3. 通达信行情接口是什么端口?为什么要有通达信端口?
  4. 超详细教程-爬取网站内容生成HTML文件/pdf文件
  5. Ubuntu20.04配置pytorch深度学习环境
  6. 如何将MP4视频压缩小而且还清晰?
  7. 可口可乐公司、麦当劳公司、诺基亚员工EQ测试题
  8. 水质检测中心实验室如何规划
  9. VS2013编译生成的程序如何设置以管理员权限运行
  10. Java 精简Jre