最爱的城市

最爱的城市

时间限制:1 秒
内存限制:32 兆
特殊判题:

标签

  • Floyd最短路径

题目描述

一天小明捧着一本世界地图在看,突然小明拿起笔,将他最爱的那些城市标记出来,并且随机的将这些城市中的某些用线段两两连接起来。
小明量出了每条线段的长度,现在小明想知道在这些线段组成的图中任意两个城市之间的最短距离是多少。

输入格式

输入包含多组测试数据。
每组输入第一行为两个正整数n(n<=10)和m(m<=n*(n-1)/2),n表示城市个数,m表示线段个数。
接下来m行,每行输入三个整数a,b和l,表示a市与b市之间存在一条线段,线段长度为l。(a与b不同)
每组最后一行输入两个整数x和y,表示问题:x市与y市之间的最短距离是多少。(x与y不同)
城市标号为1~n,l<=20。

输出

对于每组输入,输出x市与y市之间的最短距离,如果x市与y市之间非连通,则输出“No path”。

样例输入

4 4
1 2 4
1 3 1
1 4 1
2 3 1
2 4

样例输出

3

【分析】

       直接套用Floyd算法,求出各顶点到其他顶点的最短路径。

用java语言编写程序,代码如下:

import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner input = new Scanner(new BufferedInputStream(System.in));
		final int INF = 1000;
		while(input.hasNext()) {
			int n = input.nextInt();
			int m = input.nextInt();
			
			int[][] dist = new int[n + 1][n + 1];
			for(int i = 0; i < n + 1; i++)
			Arrays.fill(dist[i], INF);
			
			int a, b, len;
			for(int i = 0; i < m; i++) {
				a = input.nextInt();
				b = input.nextInt();
				len = input.nextInt();
				dist[a][b] = dist[b][a] = len;
			}
			
			int x = input.nextInt();
			int y = input.nextInt();
			floyd(n, dist);
			if(dist[x][y] == INF)
				System.out.println("No path");
			else
				System.out.println(dist[x][y]);
		}
	}
	
	public static void floyd(int n, int[][] dist) {
		for(int k = 1; k <= n; k++)
			for(int u = 1; u <= n; u++)
				for(int v = 1; v <= n; v++)
					if(dist[u][v] > dist[u][k] + dist[k][v])
						dist[u][v] = dist[u][k] + dist[k][v];
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于顺序存储结构的图书信息表的最爱图书查找的代码: ```c++ #include <iostream> #include <string> using namespace std; #define MAX_SIZE 100 // 定义最大存储容量 struct Book { string name; // 书名 string author; // 作者 string publisher; // 出版社 double price; // 价格 int favorite; // 是否为最爱,0表示不是,1表示是 }; struct BookList { Book books[MAX_SIZE]; // 书籍数组 int length; // 当前存储的书籍数量 }; // 查找最爱图书 int find_favorite_book(BookList bookList) { for (int i = 0; i < bookList.length; i++) { if (bookList.books[i].favorite == 1) { return i; // 返回最爱图书的下标 } } return -1; // 没有最爱图书 } int main() { BookList bookList; bookList.books[0] = {"C++ Primer", "Lippman", "电子工业出版社", 98.0, 0}; bookList.books[1] = {"Effective C++", "Scott Meyers", "人民邮电出版社", 68.0, 1}; bookList.books[2] = {"The C Programming Language", "Kernighan&Ritchie", "机械工业出版社", 48.0, 0}; bookList.length = 3; int index = find_favorite_book(bookList); if (index != -1) { cout << "最爱图书是:" << bookList.books[index].name << endl; } else { cout << "没有最爱图书。" << endl; } return 0; } ``` 在上述代码中,我们首先定义了一个 `Book` 结构体,表示一本书的信息,包括书名、作者、出版社、价格和是否为最爱。接着,我们定义了一个 `BookList` 结构体,表示图书信息表,包括一个 `Book` 数组和当前存储的书籍数量。在 `find_favorite_book` 函数中,我们遍历整个数组,找到第一个最爱图书,如果找到了就返回该图书的下标,否则返回 -1。在 `main` 函数中,我们初始化了一个 `BookList` 对象,并调用 `find_favorite_book` 函数来查找最爱图书,如果找到了就输出其名称,否则输出“没有最爱图书”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值