学校超市选址问题(带权有向图的中心点)----C 语言

学校超市选址问题(带权有向图的中心点)----C 语言,第1张

这是最短路径问题

首先有向赋权图得用邻接表来表示宽好。

不知道邻接表是怎么建的,所以随便鼓捣了一下。。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define alloc(type) (type*)malloc(sizeof(type))

#define MAX_NUM 3.14E38

#define TRUE 1

#define FALSE 0

#define NODE_NUM 8

struct adj_list{

int index

char name[10]

float len

struct adj_list *next

}

typedef struct adj_list Node

//node[]为起始节点数组

int dijkstra(Node node[],int size,int first,float distance[],int previous[]){

//初始化数组

int *isused=new int[size]

for(int i=0i<sizei++){

distance[i]=MAX_NUM

isused[i]=FALSE

previous[i]=-1

}

//初始起始节点和邻接节点间的距迅模离

Node *pos=node[first].next

if(pos==NULL)

return 0

while(pos!=NULL){

distance[pos->index]=pos->len

previous[pos->index]=first

pos=pos->next

}

//初始化开头节亩巧缓点

distance[first]=0

isused[first]=TRUE

int current=first

//这里不是对所有的起始节点进行遍历

for(i=1i<sizei++){

//寻找一个最近开头节点的节点

float temp=MAX_NUM

for(int j=0j<sizej++){

if(isused[j]==FALSE&&distance[j]<temp){

current=j

temp=distance[j]

}

}

if(current==first) break

isused[current]=TRUE

//更新distance[]列表

pos=node[current].next

while(pos!=NULL){

if(isused[pos->index]==FALSE&&distance[pos->index]>distance[current]+pos->len){

distance[pos->index]=distance[current]+pos->len

previous[pos->index]=current

}

pos=pos->next

}

}

return current

}

//追踪线路

void printTrace(int lastindex,Node node[],int previous[]){

printf("最短路径为:")

if(lastindex==0)

printf("%s",node[0].name)

else{

int pos=lastindex

while(true){

printf("%s ",node[pos].name)

if(pos==0) break

pos=previous[pos]

}

printf("\n")

}

}

void generate(Node node[],int size){

//先输入顶点名字,然后按格式输入后面的链表节点

//格式为:name index len

//输入#结束链表节点的输入,转入其他顶点

for(int i=0i<sizei++){

printf("%d\n",i)

scanf("%s",node[i].name)

node[i].len=0.0

node[i].index=i

node[i].next=NULL

Node *pos=&node[i]

char name[10]

int index=0

float len=0.0

while(true){

scanf("%s",name)

if(strcmp(name,"#")==0) break

scanf("%d %f",&index,&len)

Node *no=alloc(Node)

strcpy(no->name,name)

no->index=index

no->len=len

no->next=NULL

pos->next=no

pos=pos->next

}

}

}

void printnode(Node *node){

printf("(%d,%s,%g)",node->index,node->name,node->len)

}

void showtable(Node node[],int size){

for(int i=0i<sizei++){

printnode(node+i)

Node *pos=node[i].next

while(pos!=NULL){

printf("->")

printnode(pos)

pos=pos->next

}

printf("\n")

}

}

int main(){

Node node[NODE_NUM]

generate(node,NODE_NUM)

float distance[NODE_NUM]

int previous[NODE_NUM]

int lastindex=dijkstra(node,NODE_NUM,0,distance,previous)

printTrace(lastindex,node,previous)

return 0

}

超市选址的程序是:

①设定超市应满足的基本条件

②在特定的区域中找出满足基本条件的地点

③确定影响经营成败的关键闹物拍要素

④对这几个地点的关键要素进行分析

⑤根据分析结果进一步筛选出几个重点地点

⑥对几个重点地点进行详细的调查分析

⑦书写各地点的选址调查报告

⑧比较各个调查结果

⑨进行选址决策

选址中的关键因素

(1)人口分析。对拟开发地点周围人口的经济潜力和经济状况进行分析,分析用地附近是否有蚂前值得依托的大量居住人口,人口的收入、购买力状况、消费习惯和消费心理等。人口分析要特别注意的一点是要用动态预测的手段来分析,即要关注未来人口自然增长和迁移以及人口收入的变化等。

(2)便利性分析。便利性分析的主要指标是交通易达性。交通易达性即交通便捷程度,主要取决于购物者从起点(一般是家里)到购物地点所花费的时间。需要特别指出的是,空间距离和时间距离是有区别的,易达性分析确定的距离液羡不仅仅是空间距离,因为空间距离和汽车行走需要的时间有区别。为此,有必要对汽车到该地点所花的时间进行测试。为了有效确定行车时间,可以根据所花费的时间绘制等时间距离图。

(3)竞争分析。竞争是指经营相似的产品的其他商家所可能带来的利益威胁。影响竞争的主要因素是经营同类产品的竞争者的营业面积、竞争者的空间距离、竞争者的品牌强度以及未来可能出现的竞争威胁。

超市管理系统

*/

#include<stdio.h>

#include<string.h>

//欢迎界面//

void welcome()

//功能浏览//

void mainMenu()

//购物结算//

void saleCalc()

//进货管理//

void addGoods()

//修改信息

void updateGoods()

//显示商品//

void showGoods()

//删除商品//

void deleteGoods()

//查询商品//

int searchGoods()

//购买结算

void saleCalc()

//更新库存//

void updateGoodsNum(int number,char name[50])

//结构体

struct goods

{

char name[50]//商品名称

int num//商品数量

float price//商品价格

}

int count/雀族袭/商品种类数量

goods list[1000]//声明goods的变量数组

char name[50]

void main()//主函数

{

int num

welcome()

do{

mainMenu()

printf("请选择功能:")

scanf("%d",&num)

switch(num)

{

case 1:

saleCalc()

break

case 2:

addGoods()

break

case 3:

updateGoods()

break

case 4:

showGoods()

break

case 5:

deleteGoods()

break

case 0:

break

}

}while(num!=0)

}

void welcome()//欢迎界面

{

printf("-------------------------------------------------------------------------\n")

printf("****************欢迎使用超市管理系统*******************\n")

printf("-------------------------------------------------------------------------\n")

}

void mainMenu()//功能浏览界面

{

printf("****1.购物结算****\n")

printf("****2.进货管理****\n")

printf("****3.修改商品****\n")

printf("****4.显示商品****\n")

printf("****5.删穗厅除商品****\n")

printf("****0.退出系统****\n")

}

//查询信息

int searchGoods()//查询商品信息

{

printf("请输入您要购买商品的名字:")

scanf("%s",name)

for(int i=0i<counti++)

{

if(stricmp(name,list[i].name)==0)

{

return 1

}

else

{

printf("对不起了,没有找到%c商品\n",name)

return -1

}

}

}

//购物结算

void saleCalc()//购物结算

{

int number,i,s

float priceGoods=0,sum=0,money

char c=' '

s=searchGoods()

do

{

if(s==-1)

{

s=searchGoods()

}else

{

printf("该商品b存在")

for(i=0i<counti++)

{

if(strcmp(name,list[i].name)==0)

{

priceGoods=list[i].price

break

}

}

printf("请顷兄输入您要购买的数量:")

scanf("%d",&number)

sum=priceGoods*number

updateGoodsNum(-number,name)

printf("是否继续购买(y/n)")

fflush(stdin)

c=getchar()

}

}while(c=='y'||c=='Y')

printf("本次消费总金额为:%.2f",sum)

printf("请输入您的实际付款金额:")

scanf("%f",&money)

printf("找零:%.2f\n",money-sum)

}

//进货管理

void addGoods() //商品的录入

{

int i=0

char c=' '

do

{

printf("请输入商品的名称:")

fflush(stdin)

scanf("%s",list[i].name)

printf("请输入商品的数量:")

scanf("%d",&list[i].num)

printf("请输入商品的单价:")

scanf("%f",&list[i].price)

printf("是否继续(y/n)")

fflush(stdin)

c=getchar()

}while(c=='Y'||c=='y')

}

//更新库存

void updateGoodsNum(int number,char name[50])

{

int i

for(i=0i<counti++)

{

list[i].num+=number//list[i].num=list[i].num+number

}

}

//显示货物信息

void showGoods()

{

printf("商品名称\t数量\t单价\n")

for(int i=0i<counti++)

{

printf("%s\t%d\t%.2f\n",list[i].name,list[i].num,list[i].price)

}

}

//修改商品信息

void updateGoods()

{

int i

printf("请输入您要修改商品的名字:")

scanf("%s",&name)

for(i=0i<counti++)

{

if(strcmp(name,list[i].name)==0)

{

printf("请输入新的商品名字:")

scanf("%s",list[i].name)

printf("请输入您要修改商品的数量:")

scanf("%d",list[i].num)

printf("请输入您要修改商品的单价:")

scanf("%f",list[i].price)

}

else

{

printf("对不起,没有找到该商品信息!")

}

}

}

//删除商品信息

void deleteGoods()

{

int index=-1

printf("请输入您要删除的商品名字:")

scanf("%s",name)

for(int i=0i<counti++)

{

if(strcmp(name,list[i].name)==0)

{

index=i

}

}if(index==-1)

{

printf("对不起!没有找到您要删除的商品信息!")

}

else{

for(int i=indexi<counti++)

{

list[i]=list[i+1]

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12497631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存