城市公交车线路查询算法!急!
小弟我做课程设计要用到这个算法,有哪位大侠帮我一把,不胜感激! 问题点数:20、回复次数:6Top
1 楼frman()回复于 2003-01-08 20:43:29 得分 0
说具体点,不过我一看“公交车”感觉不是DIJKSTRA就是DP :)Top
2 楼qrlvls( 空 气 )回复于 2003-01-08 20:54:25 得分 0
数据结构中应该有现成的东西,图的最短路径嘛!
呵呵,考虑考虑先。Top
3 楼hhdn(想高飞的小小鸟)回复于 2003-01-09 08:43:18 得分 0
小弟我的课程设计是用Oracle8i作后台数据库,前台用java编写动态网页,
我对系统运行环境的选择
(1)服务器端软件环境
操作系统:RedHat Linux8.0
数据库系统:Oracle 8.1.7 Universal Server
(2)客户机端软件环境
浏览器:Internet Explorer、Netscape Communicator等
(3)应用开发环境
使用SOL、PL/SQL语言编写能产生动态交互式WEB页面的存储过程及软件包;使用Jbuilder7编写静态JSP网页页面。
但是,我现在不知道是用java编写查询算法还是用Oracle的PL/SQL编写算法
我想用弗洛伊德算法,但怎么将他转化为具体的java或PL/SQL代码,有哪位大侠好心能把算法提供给我,江湖救急呀!!!,不胜感激!!!Top
4 楼eion(那个谁)回复于 2003-01-09 14:15:31 得分 0
给100分吧
我把源码给你贴出来Top
5 楼eion(那个谁)回复于 2003-01-09 14:15:57 得分 20
#include <string.h>
/*##/*~~~~~~~~~~ Noted by Tang Houjian(ÌÆºñ¼ó)[2002-6-21 10:30:39] ~~~~~~~~~~~*/
/*
/* ³Ë×ø¹«¹²Æû³µÊ±µÄ»»³µÎÊÌâ¡£ÀýÈç´ÓÕ¾Aµ½ZÒª×ø¼¸Â·³µ£¬»»¼¸´Î£¬ÔÚÄÄÀï»»³µ£¬ÕâЩÎÊÌâÈçºÎ½â¾ö¡£
/* ³µ´Î¡¡¡¡³µÕ¾
/* 1¡¡¡¡¡¡q,w,e,r,t,y
/* 2¡¡¡¡¡¡a,s,d,f,g,h
/* 3¡¡¡¡¡¡z,x,c,v,b,n
/* 4¡¡¡¡ p,o,i,u,y,t
/* 5¡¡¡¡ l,k,j,h,g,f
/* 6¡¡¡¡ m,n,b,v,c,x
/* 7¡¡¡¡ q,a,z,w,s,x
/*
/*________________ Ended Note [2002-6-21 10:30:39] _____________________##*/
#define M 7 // ³µ´ÎÊý
// ³µ´ÎÍ£¿¿Õ¾Áбí
char *Station[M] = {
"QWERTY", // µÚ0´Î³µ
"ASDFGH", // µÚ1´Î³µ
"ZXCVBN", // µÚ2´Î³µ
"POIUYT", // µÚ3´Î³µ
"LKJHGF", // µÚ4´Î³µ
"MABVCX", // µÚ5´Î³µ
"QAZWSX"};// µÚ6´Î³µ
// ÒѾ­³Ë׏ýµÄ³µ´ÎÁÐ±í£¬¶ÔÓ¦take[i]=0±íʾ»¹Î´³Ë×Å£¬£½1±íʾÒѾ­³Ë׏ý
int taked[M]={0,0,0,0,0,0,0};
// »»³µµÄϳµµã
struct Exchange
{
static int Len; // ³¤¶È
int route; // ³µ´Î
char pos; // »»³µÕ¾µã
} Path[M]; // »»³µÂ·¾¶
int Exchange::Len = 0; // ³õʼ»¯Â·¾¶³¤¶È
bool PassBy(char P, char* path) // ¿´Â·¾¶pathµÄ³µÊÇ·ñ¾­¹ýµãP
{
while(*path!='\0') if( P==*(path++) ) return true;
return false;
}
// ´òӡ·¾¶£¬Ã»µÃ˵
void print_path()
{
static int cnt = 0;
printf("%04d",++cnt);
for(int i=0;i<Path[0].Len-1;i++)
printf(" (%2d: %c) --> ",Path[i].route+1,Path[i].pos);
printf(" (%2d: %c) ",Path[i].route+1,Path[i].pos);
printf("\n");
}
void NextSearchPath(char end,int route) // µÝ¹éѰÕÒ·¾¶
{
if( taked[route]!=0 ) return; // have been taked;
if( PassBy(end,Station[route]) )
{
Path[Path[0].Len].pos = end;
Path[Path[0].Len].route = route;
Path[0].Len++;
print_path();
Path[0].Len--;
return;
}
taked[route] = 1; //have been taked;
Path[Path[0].Len].route = route;
for(int i=0;i<strlen(Station[route]);i++)
{
char nowPos = Station[route][i];
if( nowPos==Path[Path[0].Len-1].pos ) continue;
for( int j=0; j<M; j++) if( PassBy(nowPos,Station[j]) )
{
Path[Path[0].Len].pos = nowPos;
Path[0].Len++;
NextSearchPath(end,j);
Path[0].Len--;
}
}
taked[route] = 0; //have been taked;
}
void SearchPath(char start, char end)
{
for(int i=0;i<M;i++) if( PassBy(start,Station[i]) )
{
Path[Path[0].Len].pos = start;
Path[Path[0].Len].route = i;
Path[0].Len++;
NextSearchPath(end,i);
Path[0].Len--;
}
}
void main()
{
SearchPath('A','Z');
}
//£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­£­
Top
6 楼eion(那个谁)回复于 2003-01-09 14:19:40 得分 0
What?我的注释!!!!!!!!!!!!!!
// 乘车方案.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string.h>
/*##/*~~~~~~~~~~ Noted by [2002-6-21 10:30:39] ~~~~~~~~~~~*/
/*
/* 乘坐公共汽车时的换车问题。例如从站A到Z要坐几路车,换几次,在哪里换车,这些问题如何解决。
/* 车次 车站
/* 1 q,w,e,r,t,y
/* 2 a,s,d,f,g,h
/* 3 z,x,c,v,b,n
/* 4 p,o,i,u,y,t
/* 5 l,k,j,h,g,f
/* 6 m,n,b,v,c,x
/* 7 q,a,z,w,s,x
/*
/*________________ Ended Note [2002-6-21 10:30:39] _____________________##*/
#define M 7 // 车次数
// 车次停靠站列表
char *Station[M] = {
"QWERTY", // 第0次车
"ASDFGH", // 第1次车
"ZXCVBN", // 第2次车
"POIUYT", // 第3次车
"LKJHGF", // 第4次车
"MABVCX", // 第5次车
"QAZWSX"};// 第6次车
// 已经乘着过的车次列表,对应take[i]=0表示还未乘着,=1表示已经乘着过
int taked[M]={0,0,0,0,0,0,0};
// 换车的下车点
struct Exchange
{
static int Len; // 长度
int route; // 车次
char pos; // 换车站点
} Path[M]; // 换车路径
int Exchange::Len = 0; // 初始化路径长度
bool PassBy(char P, char* path) // 看路径path的车是否经过点P
{
while(*path!='\0') if( P==*(path++) ) return true;
return false;
}
// 打印路径,没得说
void print_path()
{
static int cnt = 0;
printf("%04d",++cnt);
for(int i=0;i<Path[0].Len-1;i++)
printf(" (%2d: %c) --> ",Path[i].route+1,Path[i].pos);
printf(" (%2d: %c) ",Path[i].route+1,Path[i].pos);
printf("\n");
}
void NextSearchPath(char end,int route) // 递归寻找路径
{
if( taked[route]!=0 ) return; // have been taked;
if( PassBy(end,Station[route]) )
{
Path[Path[0].Len].pos = end;
Path[Path[0].Len].route = route;
Path[0].Len++;
print_path();
Path[0].Len--;
return;
}
taked[route] = 1; //have been taked;
Path[Path[0].Len].route = route;
for(int i=0;i<strlen(Station[route]);i++)
{
char nowPos = Station[route][i];
if( nowPos==Path[Path[0].Len-1].pos ) continue;
for( int j=0; j<M; j++) if( PassBy(nowPos,Station[j]) )
{
Path[Path[0].Len].pos = nowPos;
Path[0].Len++;
NextSearchPath(end,j);
Path[0].Len--;
}
}
taked[route] = 0; //have been taked;
}
void SearchPath(char start, char end)
{
for(int i=0;i<M;i++) if( PassBy(start,Station[i]) )
{
Path[Path[0].Len].pos = start;
Path[Path[0].Len].route = i;
Path[0].Len++;
NextSearchPath(end,i);
Path[0].Len--;
}
}
void main()
{
SearchPath('A','Z');
}
//---------------------------------------------
Top




