zoukankan      html  css  js  c++  java
  • bfs求最短路径

    好久没写搜索,到忘了,找了半个小时错误。

    一开始又把题看错了,真服自己了。(认真审题)

    @XKFERA9UU544E3~M53F2NE


    这题可以用excel写。but作为一个程序园,那就要使用灵魂操作。


    核心算法:bfs层次遍历


      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 
      4 string s[35];
      5 int vist[35][55];//标记 
      6 int disx[4] = {0, 0, -1, 1};
      7 int disy[4] = {1, -1, 0, 0};
      8 int minn = 2000;
      9 int cnt = 0;
     10 int main(){
     11 	memset(vist, -1, sizeof(vist));
     12 	for(int i = 0; i < 30; ++ i)
     13 		cin >> s[i];
     14 	queue<pair<int, pair<int, int>>> q;
     15 	for(int i = 0; i < 50; ++ i)
     16 		if(s[0][i] != '1')
     17 			q.push(make_pair(0, make_pair(0, i))), vist[0][i] = 0;
     18 
     19 	while(q.size()){
     20 
     21 		auto now = q.front();q.pop();
     22 		if(now.first >= minn) break;
     23 		for(int i = 0; i < 4; ++ i){
     24 			int ntx = now.second.first + disx[i];
     25 			int nty = now.second.second + disy[i];
     26 
     27 			if(ntx < 0 || ntx >= 30 || nty < 0 || nty >= 50)continue;
     28 			if(s[ntx][nty] == '1')continue;
     29 			if(vist[ntx][nty] != -1 && vist[ntx][nty] < now.first + 1)continue;
     30 			if(ntx == 29)
     31 			{
     32 				minn = now.first + 1; cnt ++;
     33 				cout << minn << endl;
     34 			}
     35 			q.push(make_pair(now.first + 1, make_pair(ntx, nty)));
     36 
     37 			vist[ntx][nty] = now.first + 1;/*1110111
     38 											 1100011
     39 											 1101011
     40 											 1100011
     41 											 1110111*/ //解决这种情况,防止少数 
     42 		}
     43 	}
     44 	cout << cnt << endl;
     45 	return 0;
     46 }
     47 
     48 
     49 
    追求吾之所爱
  • 相关阅读:
    JS代码和网页的混用
    猫扑论坛遭遇黑客挂马
    安全专家解析黑客攻击网银四大手段
    网页分析利器:IEDevToolBar
    2009年世界顶级杀毒软件排行榜
    英特尔遭遇CPU级RootKit,目前无药可医
    Linq联表查询
    从客户端中检测到有潜在危险的 Request.Form 值。
    MVC Cookie的使用
    TimSpan比较时间差
  • 原文地址:https://www.cnblogs.com/rstz/p/14391073.html
Copyright © 2011-2022 走看看