当前位置: 首页 > wzjs >正文

长沙企业建站程序科技网站首页欣赏

长沙企业建站程序,科技网站首页欣赏,在深圳帮人做网站,建设网站费怎么入账求源点到目标点最短距离 排序的里面要加上与目标点一个预估距离,与dj算法差距只有这儿 预估要小于等于真实的最短距离,吸引力要适当 越接近实际距离越快 #include<bits/stdc.h> using namespace std;// 方向向量&#xff1a;上、右、下、左 const vector<int> …

求源点到目标点最短距离

排序的里面要加上与目标点一个预估距离,与dj算法差距只有这儿

预估要小于等于真实的最短距离,吸引力要适当

越接近实际距离越快

#include<bits/stdc++.h>
using namespace std;// 方向向量:上、右、下、左
const vector<int> directions = {-1, 0, 1, 0, -1};struct Node {int x, y, cost;bool operator>(const Node &other) const {return cost > other.cost;}
};// Dijkstra 算法
int minDistance1(vector<vector<int>> &grid, int startX, int startY, int targetX, int targetY) {if (grid[startX][startY] == 0 || grid[targetX][targetY] == 0) return -1;int n = grid.size(), m = grid[0].size();vector<vector<int>> distance(n, vector<int>(m, INT_MAX));vector<vector<bool>> visited(n, vector<bool>(m, false));priority_queue<Node, vector<Node>, greater<Node>> heap;distance[startX][startY] = 1;heap.push({startX, startY, 1});while (!heap.empty()) {Node cur = heap.top(); heap.pop();int x = cur.x, y = cur.y;if (visited[x][y]) continue;visited[x][y] = true;if (x == targetX && y == targetY) return distance[x][y];for (int i = 0; i < 4; ++i) {int nx = x + directions[i], ny = y + directions[i + 1];if (nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] == 1 && !visited[nx][ny] && distance[x][y] + 1 < distance[nx][ny]) {distance[nx][ny] = distance[x][y] + 1;heap.push({nx, ny, distance[nx][ny]});}}}return -1;
}// 曼哈顿距离
int heuristic(int x, int y, int targetX, int targetY) {return abs(targetX - x) + abs(targetY - y);
}// A* 算法
int minDistance2(vector<vector<int>> &grid, int startX, int startY, int targetX, int targetY) {if (grid[startX][startY] == 0 || grid[targetX][targetY] == 0) return -1;int n = grid.size(), m = grid[0].size();vector<vector<int>> distance(n, vector<int>(m, INT_MAX));vector<vector<bool>> visited(n, vector<bool>(m, false));priority_queue<Node, vector<Node>, greater<Node>> heap;distance[startX][startY] = 1;heap.push({startX, startY, 1 + heuristic(startX, startY, targetX, targetY)});while (!heap.empty()) {Node cur = heap.top(); heap.pop();int x = cur.x, y = cur.y;if (visited[x][y]) continue;visited[x][y] = true;if (x == targetX && y == targetY) return distance[x][y];for (int i = 0; i < 4; ++i) {int nx = x + directions[i], ny = y + directions[i + 1];if (nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] == 1 && !visited[nx][ny] && distance[x][y] + 1 < distance[nx][ny]) {distance[nx][ny] = distance[x][y] + 1;heap.push({nx, ny, distance[x][y] + 1 + heuristic(nx, ny, targetX, targetY)});}}}return -1;
}// 生成随机地图
vector<vector<int>> randomGrid(int n) {vector<vector<int>> grid(n, vector<int>(n, 1));for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {if ((double)rand() / RAND_MAX < 0.3) {grid[i][j] = 0; // 30% 概率为障碍}}}return grid;
}int main() {srand(time(0));int len = 100, testTime = 10000;cout << "功能测试开始" << endl;for (int i = 0; i < testTime; ++i) {int n = rand() % len + 2;vector<vector<int>> grid = randomGrid(n);int startX = rand() % n, startY = rand() % n;int targetX = rand() % n, targetY = rand() % n;int ans1 = minDistance1(grid, startX, startY, targetX, targetY);int ans2 = minDistance2(grid, startX, startY, targetX, targetY);if (ans1 != ans2) {cout << "出错了!" << endl;}}cout << "功能测试结束" << endl;cout << "性能测试开始" << endl;vector<vector<int>> grid = randomGrid(4000);int startX = 0, startY = 0, targetX = 3900, targetY = 3900;clock_t start, end;start = clock();int ans1 = minDistance1(grid, startX, startY, targetX, targetY);end = clock();cout << "运行 Dijkstra 算法结果: " << ans1 << ", 运行时间(毫秒): " << (end - start) * 1000.0 / CLOCKS_PER_SEC << endl;start = clock();int ans2 = minDistance2(grid, startX, startY, targetX, targetY);end = clock();cout << "运行 A* 算法结果: " << ans2 << ", 运行时间(毫秒): " << (end - start) * 1000.0 / CLOCKS_PER_SEC << endl;cout << "性能测试结束" << endl;return 0;
}

floyd任意两点最短,不能有负环,可以有负边,距离就会变成无穷负

中间点最先枚举跳板点,看能不能缩短距离

P2910 [USACO08OPEN] Clear And Present Danger S - 洛谷

#include <bits/stdc++.h>
using namespace std;
const int maxn=101;
const int maxm=10001;
int path[maxm];
int distance1[maxn][maxn];//点 
int n,m,ans;
void floyd()
{for(int bridge=1;bridge<=n;bridge++){for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(distance1[i][bridge]!=INT_MAX&&distance1[bridge][j]!=INT_MAX&&distance1[i][j]>distance1[i][bridge]+distance1[bridge][j])distance1[i][j]=distance1[i][bridge]+distance1[bridge][j];}}
}
int main()
{cin>>n>>m;for(int i=0;i<m;i++) cin>>path[i];for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)distance1[i][j]=INT_MAX;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>distance1[i][j];floyd();int ans=0;for(int i=1;i<m;i++)ans+=distance1[path[i-1]][path[i]];cout<<ans;
}

bellman-ford可以解决单源最短路问题,比dj算法强在可以解决负边

787. K 站中转内最便宜的航班 - 力扣(LeetCode)

流程就是每次遍历每一条边,看看能不能缩小某两点距离,进行n-1轮操作后,一定可以松弛所有边的距离

class Solution {
public:int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {vector<int> cur(n,INT_MAX),nxt;cur[src]=0;//限制不超过k+1条边for(int i=0;i<=k;i++){nxt=cur;for(auto a:flights){if(cur[a[0]]!=INT_MAX)nxt[a[1]]=min(nxt[a[1]],cur[a[0]]+a[2]);}cur=nxt;}return cur[dst]==INT_MAX?-1:cur[dst];}
};

判断是否存在负环时候也可以用

SPFA优化

就是哪条点动过了就在下一轮优化

P3385 【模板】负环 - 洛谷

#include<bits/stdc++.h>
using namespace std;
const int maxn=2001;
const int maxm=6001;
int head[maxn],n,m;
int nxt[maxm];
int to[maxm];
int weight[maxm],cnt=1;
int distance1[maxn];
int updatecnt[maxn];//标记一个点被松弛次数
bool enter[maxn];
queue<int>q;
void addedge(int u,int v,int w)
{nxt[cnt]=head[u];to[cnt]=v;weight[cnt]=w;head[u]=cnt++;
}
bool spfa()
{distance1[1]=0;updatecnt[1]++;q.push(1);enter[1]=1;while(!q.empty()){int u=q.front();q.pop();enter[u]=false;for(int ei=head[u],v,w;ei>0;ei=nxt[ei]){v=to[ei];w=weight[ei];if(distance1[u]+w<distance1[v]){distance1[v]=distance1[u]+w;if(!enter[v]){if(++updatecnt[v]>n-1)return true;q.push(v);enter[v]=true;}}}}return false;
}
int main() 
{int t;cin>>t;while(t--){cin>>n>>m;fill(distance1+1,distance1+n+1,INT_MAX);while(!q.empty()) q.pop();cnt=1;memset(updatecnt,0,sizeof(updatecnt));memset(enter,0,sizeof(enter));memset(head,0,sizeof(head));for(int i=1,u,v,w;i<=m;i++){cin>>u>>v>>w;if(w>=0){addedge(u,v,w);addedge(v,u,w);}elseaddedge(u,v,w);}cout<<(spfa()?"YES":"NO")<<endl;} 
}

没有优化过的版本 

#include<bits/stdc++.h>
using namespace std;
const int maxn=2001;
const int maxm=6001;
int head[maxn],n,m;
int nxt[maxm];
int to[maxm];
int weight[maxm],cnt=1;
int distance1[maxn];
void addedge(int u,int v,int w)
{nxt[cnt]=head[u];to[cnt]=v;weight[cnt]=w;head[u]=cnt++;
}
bool spfa()
{distance1[1]=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){//遍历每一条边for(int k=head[j];k>0;k=nxt[k]){if(distance1[j]!=INT_MAX&&distance1[to[k]]>distance1[j]+weight[k]){if(i==n)return true;distance1[to[k]]=distance1[j]+weight[k];}}}}return false;
}
int main() 
{int t;cin>>t;while(t--){cin>>n>>m;fill(distance1+1,distance1+n+1,INT_MAX);cnt=1;memset(head,0,sizeof(head));for(int i=1,u,v,w;i<=m;i++){cin>>u>>v>>w;if(w>=0){addedge(u,v,w);addedge(v,u,w);}elseaddedge(u,v,w);}cout<<(spfa()?"YES":"NO")<<endl;} 
}


文章转载自:

http://wv2eTBV9.hxgLy.cn
http://j69pcMNW.hxgLy.cn
http://CoTpUkJh.hxgLy.cn
http://WC2Og3jj.hxgLy.cn
http://rNnWTIL8.hxgLy.cn
http://1q39BjeJ.hxgLy.cn
http://sLHbUnEN.hxgLy.cn
http://y2iRM6sH.hxgLy.cn
http://12EDRPeN.hxgLy.cn
http://Z7ABJTow.hxgLy.cn
http://yXNSsP2i.hxgLy.cn
http://eAJDVE3i.hxgLy.cn
http://dmTuMqjK.hxgLy.cn
http://9aVVVIJt.hxgLy.cn
http://diDLRPGx.hxgLy.cn
http://UsRGSgvU.hxgLy.cn
http://a5VEEwlu.hxgLy.cn
http://u8G6T5Z6.hxgLy.cn
http://eddftzBi.hxgLy.cn
http://Q1wnBjLf.hxgLy.cn
http://Vk1rwyo5.hxgLy.cn
http://jeaHxiR5.hxgLy.cn
http://wCZCjbac.hxgLy.cn
http://F5ujdm7x.hxgLy.cn
http://Ek8GPRxI.hxgLy.cn
http://kJPm64tJ.hxgLy.cn
http://daYJbQly.hxgLy.cn
http://ukOoEvTJ.hxgLy.cn
http://TAcbZAYT.hxgLy.cn
http://qM2aXAzs.hxgLy.cn
http://www.dtcms.com/wzjs/633765.html

相关文章:

  • 湛江专业的建站托管做一个什么样的网站
  • 网站建设 的类型有哪些dw怎么做网站教程
  • 制作微信网站模板wordpress建企业网站教程
  • 中企动力做的网站后台如何登陆域名备案时网站名称
  • 购物网站开发介绍wordpress美化下载页面
  • 网站建设流程周期wordpress中文破解主题下载
  • 网站建设的收获体会html5手机网站发布
  • 温州网站建设价格技术wordpress 底部悬浮
  • 做公司网站 烟台wordpress 简历主题
  • 做服务的网站吗可以进入任何网站的浏览器
  • 给别人做网站用什么蓝杉互动网站建设
  • idc新人如何做自己的网站网站 按钮 素材
  • 做网站的相关协议西安高校定制网站建设公司推荐
  • 深圳小蚁人网站建设网页设计代码书
  • 国外优秀的平面设计网站企业做电商网站有哪些
  • 销售网站模板东昌府聊城网站优化
  • 成都高新区网站建设娄底建设企业网站
  • 网站打开不了怎样做wordpress添加播放器代码
  • 网站开发亮点长洲网站建设
  • 赣榆网站建设wordpress 首页 摘要 插件
  • 网站建设实训 课程标准学做简单网站视频教程
  • 国内用react做的网站如何建设手机版网站
  • 怎么分析一个网站seo如何做网站宣传自己
  • 服装鞋帽商城网站建设php企业网站开发框架
  • 网页传奇开服表seo站外优化平台
  • 简述php网站开发流程图长春朝阳网站建设
  • 建站宝盒下载视频网站开发代码
  • 北京网站建设怎么样房屋室内装修设计
  • 国外网站空间购买大望路做网站的公司
  • 沈阳网站页面设计公司诱导视频网站怎么做