Home » i do not understand this bfs algorithm code

# i do not understand this bfs algorithm code

## Solutons:

The main thing you don’t understand is `std::pair` http://www.cplusplus.com/reference/utility/pair/ which combines two types (or two of the same type) into the type of one object made from those two.

Also notice the `using namespace std;` that lets the programmer leave off the `std::`. That is poor style for many reasons and you shouldn’t do it yourself, but should understand when others do.

so `std::pair<int, int>` is a type. Objects of that type consist of two `int`s the first of which is named `first` and the second named `second`. So it is a type very similar to:

``````struct { int first; int second; };
``````

If `cur` had been an object of the above kind of `struct`, I assume you would understand what `cur.first` and `cur.second` and if you knew what `cur.first` is then you would know what `cur.first-1` is (no magic meaning, just computing a value one less than the value of `cur.first`

And, yes, that code is finding a path between two points on a grid.

The programmer chose to represent a position `{row,column}` as a `pair`, which is a bit lazy. Then compounded that by failing to comment the fact that the `pair<int,int>` is used to hold `{row,column}`

So all those `>0` and `<4` checks are ugly ways of testing whether a specific neighbor of the current `{row,col}` really exists (as opposed to being off the edge of the map).

Next you’ll want to read about `std::queue` http://www.cplusplus.com/reference/queue/queue/

One of those is used to hold all the reachable `{row,col}` pairs for which the distance from `{0,0}` has been computed but for which the distance from `{0,0}` of some neighbor might not have been computed. So the basic operation is take one of those from one end of the queue; check all of its neighbors; and for any neighbor whose distance is newly discovered, insert in the other end of the queue.

## Performance issue with this code [closed]

In short: You should create,open,use,close,dispose Connections where you're using them. The best way is to use the using-statement. By not closing the connection as soon as possible, the Connection-Pool needs to create new physical connections to the dbms which...

## Compare a pointer to an integer in C [closed]

Here's what I think you meant to post, it still doesn't compile though, since you can't compare a pointer to a char /* *Description: Construction of a social network */ #include <stdio.h> #include <strings.h> #include <stdlib.h> #define SIZE...

## Autocomplete json in textbox

If you are using jQuery UI, the jQuery documentation on autocomplete is straightforward. Put your array as the source: and it should work automatically. IMHO, You seriously need to spend some time for googling and looking into the documentations. jQuery UI...

## Handling pairs of pattern matching in multiple excel files through VB macros

my assumptions: Excel_In1.xls == catalog.xlsx (table has unique key pair columnA & columnB in each row) Excel_In2.xls == factdata.xlsx (table has multiple duplicate key pairs; and contains data in fixed columns to be copied) Excel_Out.xls == book Out.xlsm...

## having all my scores and names in one big array

You need to initialize your array outside of your loop: name_arr = [] while int(students)>int(student): name = input ("what is your name ") score = input ("what is your score ") student = student + 1 name_arr.append(name) name_arr.append(score)...

## Execute a specific command in a given directory without cd’ing to it?

I don't know if this counts, but you can make a subshell: \$ (cd /var/log && cp -- *.log ~/Desktop) The directory is only changed for that subshell, so you avoid the work of needing to cd - afterwards. Not to undermine the value of answers given by other...

## pacman “exists on filesystem” error

After pacman finally deprecated the --force option and made the surrogate --overwrite option work as expected, the following usage pattern should be noted. A command to reproduce the --force option that blindly overwrites anything that conflicts is this: sudo...

## How to determine the maximum number to pass to make -j option?

nproc gives the number of CPU cores/threads available, e.g. 8 on a quad-core CPU supporting two-way SMT. The number of jobs you can run in parallel with make using the -j option depends on a number of factors: the amount of available memory the amount of memory...

## Number of Nearest ‘True’ in a matrix or list of list

Definitely not the best way to do it, but it's one that works: import numpy as np mas1 = np.array([[True, False, True], [ False, True, True], [ False, True, False]]) mas_answer = np.ndarray(shape=mas1.shape) for i in range(mas1.shape[0]): for j in...

## Trying to display Json data from a web url into a table

You can take this json and put it in the loop through length of the json and show data into the table. This is how i solved it <?php try{ \$url="the json url goes here"; // path to your JSON file \$data = file_get_contents(\$url); // put the contents of the...

## View v is unreachable statement

Anything else is written after the return keyword it's unreachable. Remove return super.getView(position, convertView, parent); from the first line of your function. This is a warning, telling you that static analysis of the code shows that some of your code...

## index out of range but is in fact in range [closed]

Well try to debug your code by yourself first. Anyhow for your question Why is this happening? : It gives you error in postCode = split_address[4] because your list has 4 elements 0,1,2,3 and you are accessing the 4th element which is not present.. you don't...

## Ubuntu update error: “waiting for unattended-upgr to exit”

I would first try a softer way. Stop the automatic updater. sudo dpkg-reconfigure -plow unattended-upgrades At the first prompt, choose not to download and install updates. Make a reboot. Make sure any packages in an unclean state are installed correctly. sudo...

## how to Styling classes with the same name in a file css [closed]

You need to use :nth-of-type(n) selector. // For First Right Class Div #container .right:nth-of-type(1) { } // For First Left Class Div #container .left:nth-of-type(1) { } Hence for every div you need to change n value. Your question is extremely unclear but I...

## Java – different parameters resulting to different outputs

What I think you're trying to achieve is that when you call your method "horn" with some parameter it has to either use "Beep!" or "Boop!". First of: void horn(a,b) Is not a valid function signature in Java, in a java function you always have to specify what...

## Cannot use method returned value into another method

Using @super's suggestion and a little warning fixing. The two important changes are in the line as suggested by @super: printf("r=%.3f; phi=%.3fn",distanta(),phi()); The variables 'r' and 'unghi' are both variables local to member functions and cannot be...

## Class has no member speak? [closed]

void::speak(); //THE GLOBAL SCOPE HAS NO SPEAK It's interpreting this as void ::speak() where leading an identifier (a name) with :: indicates to C++, "Look in the global scope of all names". :: is the "scope resolution operator" In the header file, you should...

## Convert code with multiple lines into one line

Read the docs! A simple statement is comprised within a single logical line. Several simple statements may occur on a single line separated by semicolons. Search Stack Overflow! How to put multiple statements in one line? Or google, to find converters for more...

## How to POSITION my Marker to Always Follow the Slider-Handle?

Youc can set a position to image using Jquery See fiddle //set a begining position to img var slider = \$(".slider")[0]; var sliderPos = slider.value / slider.max; var pixelPostion = slider.clientWidth * sliderPos; \$(".img").css("left",pixelPostion-7 + "px");...

## css nth-child() check board pattern [closed]

This is pretty simple, as the pattern is repeated over 2 rows of 4, you just need to apply styles to 8n + i for the chequered pattern: .flex { display: flex; width: 400px; /* width of four squares */ flex-direction: row; flex-wrap: wrap; } .square { width:...