NC17526. 青蛙
描述
输入描述
第一行两个数m,n;表示黑色物品在数轴m点上,数轴上总共有n个隧道
接下来n行,每行a,b两个数,表示从a进会从b出
10 <= m,n <= 233
0<a,b<=m
输出描述
一个数ans表示最小步数
示例1
输入:
16 4 2 10 8 15 12 5 13 6
输出:
7
说明:
C++14(g++5.4) 解法, 执行用时: 19ms, 内存消耗: 744K, 提交时间: 2020-04-01 21:25:18
#include<iostream> using namespace std; int main() { int m,n,a,b; cin>>m>>n; int d[234][234]; for(int i=0;i<=m;i++) for(int j=0;j<=m;j++) d[i][j]=abs(i-j); while(n--) { cin>>a>>b; d[a][b]=1; } for(int k=0;k<=m;k++) for(int i=0;i<=m;i++) for(int j=0;j<=m;j++) d[i][j]=min(d[i][k]+d[k][j],d[i][j]); cout<<d[0][m]<<endl; return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 14ms, 内存消耗: 612K, 提交时间: 2022-10-05 19:42:44
#include<bits/stdc++.h> #define f(i,n) for(int i=0;i<=n;i++) using namespace std; int n,m,f[230][230],a,b; int main(){ cin>>n>>m; f(i,n)f(j,n)f[i][j]=abs(i-j); while(m--){cin>>a>>b;f[a][b]=1;} f(k,n)f(i,n)f(j,n)f[i][j]=min(f[i][j],f[i][k]+f[k][j]); cout<<f[0][n]; return 0; }