每日随笔3.19
今天,用了整整一天的时间来进行实现,
利用了两个方法:
第一个方法:仅可以实现单线的查询
以下代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String begin=request.getParameter("begin");
String end=request.getParameter("end");
System.out.println("begin = "+begin);
System.out.println("end = "+end);
//将起点站线路封装
List<Subway> begins =new ArrayList<Subway>();
begins=service.Stopquery(begin);
//将终点站线路封装
List<Subway> ends =new ArrayList<Subway>();
ends=service.Stopquery(end);
//遍历输出起点的编号
System.out.println("起点线路:");
for (Subway s:begins)
{
System.out.println(s.getStop_name());
System.out.println(s.getLine_id());
System.out.println(s.getLine_num());
}
System.out.println("终点线路:");
for (Subway s:ends)
{
System.out.println(s.getStop_name());
System.out.println(s.getLine_id());
System.out.println(s.getLine_num());
}
boolean judgement = false;
List<Subway> subwayshow = null;
for (Subway bs:begins)
{
System.out.println("起点站 " + bs.getLine_id() + "号线");
System.out.println("起点站序号 " + bs.getLine_num());
for (Subway es:ends)
{
System.out.println("终点站 " + es.getLine_id() + "号线");
System.out.println("终点站序号 " + es.getLine_num());
if(bs.getLine_id()==es.getLine_id())
{ judgement = true;
int temp = 0;
if(bs.getLine_num()>es.getLine_num())
{
temp = bs.getLine_num()-es.getLine_num();
}else
{
temp = es.getLine_num()-bs.getLine_num();
}
System.out.println("是同一条线路,中间有" + temp + "站");
begin_id = bs.getLine_id();
begin_num = bs.getLine_num();
end_id = es.getLine_id();
end_num = es.getLine_num();
//创建一个list来存相同路线
List<Subway> subways =new ArrayList<Subway>();
subways=service.Linequery(String.valueOf(begin_id));
//System.out.println(subways);
//使用subways1来存间隔路线
subwayshow = new ArrayList<Subway>();
if(begin_num<end_num)
{
for (Subway s1: subways)
{
if((s1.getLine_num()>=begin_num)&&(s1.getLine_num()<=end_num))
{
subwayshow.add(s1);
}
}
} else
{
for (Subway s1: subways)
{
if((s1.getLine_num()>=end_num)&&(s1.getLine_num()<=begin_num))
{
subwayshow.add(s1);
}
}
}
}
}
}
System.out.println("judgement : " + judgement);
if(judgement) {
//删除
System.out.println("--------------------------------------------------------------");
//System.out.println("最终线路:");
request.setAttribute("subways", subwayshow);
request.getRequestDispatcher("Linequeryresult.jsp").forward(request, response);
}
else
{
int min = 1000;
boolean Judgement = false;
for (Subway bs:begins)
{ int BeginLine_id = 0;
int EndLine_id = 0;
for (Subway es : ends)
{
if(bs.getLine_id() <= es.getLine_id())
{
BeginLine_id = bs.getLine_id();
EndLine_id = es.getLine_id();
}else
{
BeginLine_id = es.getLine_id();
EndLine_id = bs.getLine_id();
}
/*
取出两个集合
for(i1)
{
for(i2)
{
A(i1,i2);
}
}
A(i1,i2)
{if(panduan(i1,i2))
{
return ;
}else
{ i3=集合(i1)
for(i3)
{
A(i3,i2);
}
return ;
}
}
*/
// System.out.println("BeginLine_id: " + BeginLine_id);
// System.out.println("EndLine_id:" + EndLine_id);
// Transit transit=service.Transitquery(BeginLine_id,EndLine_id);
// if(transit!=null) {
// Judgement = true;
// System.out.println(transit.getStop_name());
// }
// else{
// continue;
// }
}
}
if(Judgement == false)
{
System.out.println("这两站不相连");
}
}
}
然后进行多条线路的查询:
以下为伪代码:
/*
取出两个集合
for(i1)
{
for(i2)
{
A(i1,i2);
}
}
A(i1,i2)
{if(panduan(i1,i2))
{
return ;
}else
{ i3=集合(i1)
for(i3)
{
A(i3,i2);
}
return ;
}
}
*/
第二个方法:
可以实现各个单线点的最短距离
主要靠矩阵来实现深度遍历
private Service service = new Service();
int n = 0;
int m = 0;
int x = 0;
int y = 0;
int ans = 1000000;
int [ ][ ] mp=new int [20][20];
int [ ][ ] vis=new int[20][20];
boolean flag = false;
int count = 0;
int []arr = new int[10000];
boolean judgement = false;
private void dfsplus(int x,int y,int temp)
{
if(judgement)
{
return;
}
else {
if(temp > ans)
{ mp[x][y] = -1;
vis[x][y] = 0;
return;
}
else {
if (x < 0 || x >= 20 || y < 0 || y >= 20 || mp[x][y] == 0 || vis[x][y] == 1) {
return;
}
if (mp[x][y] == n && temp == ans) {
judgement = true;
return;
}
vis[x][y] = 1;
mp[x][y] = n;
System.out.println("开始=========================");
System.out.println("x = "+x + "y = " + y);
System.out.println("vis[x][y] = " + vis[x][y]);
System.out.println("mp[x][y] = " + mp[x][y]);
System.out.println("===========================");
dfsplus(x, y - 1, temp + 1);
dfsplus(x + 1, y, temp + 1);
dfsplus(x, y + 1, temp + 1);
dfsplus(x - 1, y, temp + 1);
mp[x][y] = -1;
vis[x][y] = 0;
System.out.println("结束=========================");
System.out.println("x = "+x + "y = " + y);
System.out.println("vis[x][y] = " + vis[x][y]);
System.out.println("mp[x][y] = " + mp[x][y]);
System.out.println("===========================");
}
}
}
private void dfs(int x,int y,int temp)
{
//System.out.println(mp[x][y]);
if(x<0 || x >= 20 || y<0 || y >= 20 || mp[x][y] == 0 || vis[x][y] == 1)
{
return;
}
if(mp[x][y] == n)
{
if(temp<= ans)
{
ans = temp;
}
return ;
}
vis[x][y] = 1;
dfs(x-1,y,temp+1);
dfs(x,y-1,temp+1);
dfs(x+1,y,temp+1);
dfs(x,y-1,temp+1);
vis[x][y] = 0;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
mp[0][19] = 1;
mp[1][19] = 2;
mp[2][19] = 3;
mp[3][19] = 4;
mp[4][19] = 5;
mp[5][19] = 6;
mp[6][19] = 7;
mp[7][19] = 8;
mp[8][19] = 9;
mp[8][18] = 10;
mp[8][17] = 11;
mp[8][16] = 12;
mp[8][15] = 13;
mp[8][14] = 14;
mp[8][13] = 15;
mp[8][12] = 16;
mp[8][11] = 17;
mp[8][10] = 18;
mp[8][9] = 19;
mp[8][8] = 20;
mp[8][7] = 21;
mp[8][6] = 22;
mp[8][5] = 23;
mp[8][4] = 24;
mp[8][3] = 25;
mp[8][2] = 26;
mp[3][10] = 27;
mp[4][10] = 28;
mp[5][10] = 29;
mp[6][10] = 30;
mp[7][10] = 31;
mp[9][10] = 32;
mp[10][10] = 33;
mp[11][10] = 34;
mp[11][9] = 35;
mp[11][8] = 36;
mp[12][8] = 36;
mp[12][7] = 37;
mp[12][6] = 38;
mp[12][5] = 59;
mp[12][4] = 60;
mp[5][5] = 39;
mp[5][6] = 40;
mp[5][7] = 41;
mp[6][7] = 42;
mp[7][7] = 43;
mp[9][7] = 44;
mp[10][7] = 45;
mp[10][8] = 46;
mp[13][8] = 47;
mp[14][8] = 48;
mp[15][8] = 49;
mp[16][8] = 50;
mp[16][9] = 51;
mp[16][10] = 52;
mp[16][11] = 53;
mp[16][12] = 54;
mp[16][13] = 55;
mp[16][14] = 56;
mp[16][15] = 57;
mp[16][16] = 58;
String begin = request.getParameter("begin");
String end = request.getParameter("end");
ShortLine shortLine1 = service.Shortistquery(begin);
ShortLine shortLine2 = service.Shortistquery(end);
System.out.println("begin_id = " + shortLine1.getId());
System.out.println("end_id = " + shortLine2.getId());
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if (mp[i][j] < 10)
System.out.print(" " + mp[i][j] + " ");
else {
System.out.print(mp[i][j] + " ");
}
}
System.out.println();
}
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if (mp[i][j] == shortLine1.getId()) {
x = i;
y = j;
break;
}
}
}
n = shortLine2.getId();
dfs(x, y, 0);
System.out.println("ans = " + ans);
dfsplus(x,y,0);
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if (mp[i][j] < 10 && mp[i][j] >=0)
System.out.print(" " + mp[i][j] + " ");
else {
System.out.print(mp[i][j] + " ");
}
}
System.out.println();
}
}
只需将地铁线路录入矩阵即可。进行实现显示出路线还未实现,做了快2个小时,没搞出来.
cp照:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)