5 views

Uploaded by Diana Arun

Data Structures notes

- PCalc Description
- Phpunit Book
- Python Journal
- 6th_chapter-the_stack_(2)
- javaAU
- Data structures
- Junit Cheat Sheet
- Stack
- VTU computer science Lab manual.pdf
- Bil137-1011-3
- ADT Stacks and Queues
- DATA Structure.pdf
- 8Queens problem
- Stack Queue
- Logic Group (Autosaved)j
- Principles of SW Eng
- OrganizaçãodeMemória628.pdf
- Assignments 01
- Power Point Delphi Handri
- DSUC

You are on page 1of 32

**Using Using a a Stack Stack
**

Ë

Ë

Ë

Data Structures and Other Objects Using C++

Chapter 7 introduces the stack data type. Several example applications of stacks are given in that chapter. This presentation shows another use called backtracking to solve the N-Queens problem.

This lecture demonstrates an application of stacks: implementing backtracking to solve the N-Queens problem. The presentation includes a demonstration program which you can run at a couple points during the presentation. The demonstation requires EGA or VGA graphics on a PC. The best time for this lecture is after the students have read Chapter 7 on stacks. If the students want additional information about the Nqueens problem, you can direct them to Programming Project 9 in Chapter 7.

2

The The N-Queens N-Queens Problem Problem

Ë

Ë

Suppose you have 8 chess queens... ...and a chess board

We'll start with a description of a problem which involves a bunch of queens from a chess game, and a chess board.

3

The The N-Queens N-Queens Problem Problem

Can the queens be placed on the board so that no two queens are attacking each other

?

Some of you may have seen this problem before. The goal is to place all the queens on the board so that none of the queens are attacking each other.

... then you know that this forbids two queens from being in the same row.. If you play chess. .4 The The N-Queens N-Queens Problem Problem Two queens are not allowed in the same row.

or in the same column.. or in the same column. .. ....5 The The N-Queens N-Queens Problem Problem Two queens are not allowed in the same row..

. 2. In that case. if the program does discover a solution. Maybe the problem does have a solution. Maybe the problem has no solution.6 The The N-Queens N-Queens Problem Problem Two queens are not allowed in the same row.. As a quick survey. As an aside. we can easily check that the solution is correct.or along the same diagonal. or in the same column. how many of you think that a solution will be possible? In any case.. because we will write a program to try to find a solution. But suppose the program tells us that there is no solution. we shall find out. there are actually two possibilies to keep in mind: 1. or along the same diagonal. and the program has a bug! Moral of the story: Always create an independent test to increase the confidence in the correctness of your programs. .

N ro ws . For example. and the size of the board can vary.7 The The N-Queens N-Queens Problem Problem The number of queens. if I have six queens. then the board will be a six by six chess board. N Queens N columns The program that we write will actually permit a varying number of queens. The number of queens must always equal the size of the chess board.

but it is interesting to watch and the students can try to figure out the algorithm used by the program. N=10 takes a few minutes. With N less than 4. a student can provide the value of N. If you can run ega or vga graphics. I can give you a demonstration of the program at work. The demonstration uses graphics to display the progress of the program as it searches for a solution. . you can double click on this icon with the left mouse button: At this point.8 The The N-Queens N-Queens Problem Problem We will write a program which tries to find a way to place N queens on an N x N chess board. During the demonstration. the program is rather boring. But N=4 provides some interest.

The technique is called backtracking. I want to show you the algorithm that the program uses.9 How How the the program program works works The program uses a stack to keep track of where each queen is placed. . The key feature is that a stack is used to keep track of each placement of a queen.

when we place the first queen in the first column of the first row. .10 How How the the program program works works Each time the program decides to place a queen on the board. COL 1 For example. we record this placement by pushing a record onto the stack. the position of the new queen is stored in a record which is placed in the stack. This record contains both the row and column number of the newlyplaced queen. ROW 1.

.11 How How the the program program works works We also have an integer variable to keep track of how many rows have been filled so far. we also keep track of one other item: an integer which tells us how many rows currently have a queen placed. ROW 1. COL 1 1 filled In addition to the stack.

we start by placing the queen in the first column. COL 1 ROW 1... COL 1 1 filled When we successfully place a queen in one row.12 How How the the program program works works Each time we try to place a new queen in the next row. we move to the next row. . ROW 2. We always start by trying to place the queen in the first column of the new row.

COL 1 1 filled But each new placement must be checked for potential conflicts with the previous queen..13 How How the the program program works works .if there is a conflict with another queen. ROW 2. If there is a conflict.. . COL 2 ROW 1. then the newly-placed queen is shifted rightward. then we shift the new queen to the next column.

the queen is shifted rightward again. COL 3 ROW 1. . COL 1 1 filled Sometimes another conflict will occur. and the newly-placed queen must continue shifting rightward.14 How How the the program program works works If another conflict occurs. ROW 2.

In order to move on. COL 3 ROW 1. we add one to the value of filled. then the algorithm can move on. ROW 2.15 How How the the program program works works When there are no conflicts.. . we stop and add one to the value of filled. COL 1 2 filled When the new queen reaches a spot with no conflicts..

The first position we try has a conflict.16 How How the the program program works works Let's look at the third row.. COL 3 ROW 1.. .. COL 1 ROW 2.and place a new queen in the first column of the next row. ROW 3. COL 1 2 filled ..

17 How How the the program program works works . so we move her rightward to the second column.. ROW 3.so we shift to column 2. there is a conflict with the placement of the new queen. COL 2 ROW 2... COL 1 2 filled In this example. But another conflict arises. .. COL 3 ROW 1.

COL 3 ROW 1. COL 3 ROW 2.18 How How the the program program works works ... Yet another conflict arises.. . COL 1 2 filled Another conflict arises.. so we move rightward to the third column.and we shift to the third column. ROW 3.

.and we shift to column 4. so we move to the fourth column. The key idea is that each time we try a particular location for the new queen.. ROW 3. we need to check whether the new location causes conflicts with our previous queens. COL 1 2 filled Yet another conflict arises.. . then we move the new queen to the next possible location.19 How How the the program program works works . COL 4 ROW 2. COL 3 ROW 1. If so. so we try to shift rightward again.. There's still a conflict in column 4.

COL 4 ROW 2.20 How How the the program program works works . .. This is where backtracking comes into play.but there's nowhere else to go. COL 3 ROW 1.. ROW 3. COL 1 2 filled Sometimes we run out of possible locations for the new queens.

popping the stack. ROW 2. At the previous row. and returning to the previous row. reducing filled by 1. COL 1 1 filled To backtrack. COL 3 ROW 1. . we continue shifting the queen rightward. we throw out the new queen altogether.21 How How the the program program works works When we run out of room in a row: Ë pop the stack. Ë reduce filled by 1 Ë and continue working on the previous row.

COL 4 ROW 1. ROW 2. .22 How How the the program program works works Now we continue working on row 2. The position of this previous queen is recorded in the stack. COL 1 1 filled Notice that we continue the previous row from the spot where we left off. The queen shifts from column 3 to column 4. so we can just move the queen rightward one more position. shifting the queen to the right. We don't return her back to column 1. It is the use of the stack that lets us easily continue where we left off.

. ROW 2. COL 1 2 filled The new position for row 2 has no conflicts. so we can increase filled by 1.23 How How the the program program works works This position has no conflicts. and move to row 3. so we can increase filled by 1. COL 4 ROW 1. and move again to row 3.

COL 1 ROW 2. But when the algorithm backtracks. it continues whereever it left off. COL 1 2 filled At the new row. we start again at the first column.24 How How the the program program works works In row 3. So the general rules are: When the algorithm moves forward. we again start at the first column. ROW 3. it always starts with the first column. . COL 4 ROW 1.

.. The stack is initialized as an empty stack. pushing its position onto the stack and setting filled to 0. we enter a loop with three possible actions at each iteration. . After the initialization. repeat these steps Ë if there are no conflicts with the queens... We'll look at each action in detail..25 Pseudocode Pseudocode for for N-Queens N-Queens Initialize a stack where we can keep track of our decisions... Here’s the pseudocode for implementing the backtrack algorithm. Place the first queen. Ë else if there is a conflict and there is room to shift the current queen rightward.. and then we place the first queen. Ë else if there is a conflict and there is no room to shift the current queen rightward.

If filled is now N. .. then the algorithm is done. Increase filled by 1.. Another aside: How do you suppose the program "checks for conflicts"? Hint: It helps if the stack is implemented in a way that permits the program to peek inside and see all of the recorded positions. then we are done! But if filled is still less than N. This "peek inside" operation is often implemented with a stack. Otherwise. The nicest possibility is when none of the queens have any conflicts. move to the next row and place a queen in the first column. we'll record its position in the stack.26 Pseudocode Pseudocode for for N-Queens N-Queens repeat these steps Ë if there are no conflicts with the queens. In this case. although the ability to actually change entries is limited to the usual pushing and popping. we can increase filled by 1. then we can move to the next row and place a queen in the first column. When this new queen is placed. If filled is now N.

Move the current queen rightward. we just move the new queen to the right. .27 Pseudocode Pseudocode for for N-Queens N-Queens repeat these steps Ë if there are no conflicts with the queens. The second possiblity is that a conflict arises. adjusting the record on top of the stack to indicate the new position.. In this case.... and the new queen has room to move rightward. Ë else if there is a conflict and there is room to shift the current queen rightward.

. In other words. In this case we backtrack: Pop the stack. but the new queen has run out of room.. we shift the queen rightward. Reduce filled by 1. But there is one potential pitfall here! .. At that point. and continue the loop. We must keep doing these two steps until we find a row where the queen can be shifted rightward. Ë else if there is a conflict and there is no room to shift the current queen rightward. Backtrack! Keep popping the stack. Ë else if there is a conflict and there is room to shift the current queen rightward. until we find a row where the queen is not already at the end.. until you reach a row where the queen can be shifted rightward.. The last possiblity is that a conflict exists..28 Pseudocode Pseudocode for for N-Queens N-Queens repeat these steps Ë if there are no conflicts with the queens. and reducing filled by 1. Shift this queen right.

. In that case. and ran out of possible places to place the first queen.. What would that indicate? Answer: It means that we backtracked right back to the beginning. Backtrack! Keep popping the stack. Ë else if there is a conflict and there is no room to shift the current queen rightward.. the problem has no solution. ... Shift this queen right.29 Pseudocode Pseudocode for for N-Queens N-Queens repeat these steps Ë if there are no conflicts with the queens. Ë else if there is a conflict and there is room to shift the current queen rightward. until you reach a row where the queen can be shifted rightward. and reducing filled by 1. The potential pitfall: Maybe the stack becomes empty during this popping..

.30 Watching Watching the the program program work work You can double click the left mouse button here to run the demonstration program a second time: Just for fun. See if you can follow the backtracking in action. we can run the demonstration program again now.

The key to backtracking: Each choice is recorded in a stack. The application which we have shown is called backtracking.31 Summary Summary Ë Ë Ë Ë Stacks have many applications. you pop the stack. and continue trying different choices for the previous decision. . . A quick summary . . When you run out of choices for the current decision.

edu . 3G Graphics Inc. TechPool Studios. Archive Arts. so long as this copyright notice remains intact. Students and instructors who use Data Structures and Other Objects Using C++ are welcome to use this presentation however they see fit. Image Club Graphics Inc.32 Presentation copyright 1997. For use with Data Structures and Other Objects Using C++ by Michael Main and Walter Savitch. Some artwork in the presentation is used with permission from Presentation Task Force (copyright New Vision Technologies Inc) and Corel Gallery Clipart Catalog (copyright Corel Corporation. T HE ND T HE E E ND Feel free to send your ideas to: Michael Main main@colorado. Addison Wesley Longman. Cartesia Software. Totem Graphics Inc). One Mile Up Inc.

- PCalc DescriptionUploaded bytemplar59
- Phpunit BookUploaded byAleksandar Pavić
- Python JournalUploaded byMelvin Mathew
- 6th_chapter-the_stack_(2)Uploaded bysaumen_das
- javaAUUploaded bySatheesh Kumar
- Data structuresUploaded byBonventure Kipkirui
- Junit Cheat SheetUploaded byDabke1997
- StackUploaded byAbir Das
- VTU computer science Lab manual.pdfUploaded byVinayaka VM
- Bil137-1011-3Uploaded byNemo Ceng
- ADT Stacks and QueuesUploaded byKavin Kumar
- DATA Structure.pdfUploaded bywww.bhawesh.com.np
- 8Queens problemUploaded byPratik Savla
- Stack QueueUploaded bymanishbhardwaj8131
- Logic Group (Autosaved)jUploaded byboyka
- Principles of SW EngUploaded byBryan 'Phoneguru' Ndanyi
- OrganizaçãodeMemória628.pdfUploaded byDarilho Batista Ignacio
- Assignments 01Uploaded byRodrigo Ortega
- Power Point Delphi HandriUploaded byhandryhandarisman
- DSUCUploaded bySukant Makhija
- recursion process explainedUploaded bysurbhi1992
- PQRS.pdfUploaded bybuggy
- Java Basic GUI ComponentsUploaded byotxpmm
- ProgrammingUploaded byapi-24513838
- Cheat EngineUploaded byKenneth Dionysus Santos
- Coding PowerbuilderUploaded byNandy Nandyan
- Computer Science Formulas SummaryUploaded byMajan Kaur
- Final Solutions1Uploaded bysacredborders
- 03426i04Uploaded byjaize
- Meetups_Understanding.txtUploaded byAnonymous lSAtePX1a

- How to Paint Realistic Watercolor RosesUploaded byDiana Arun
- Operating System 2 Marks and 16 Marks - AnswersUploaded byDiana Arun
- Mary Did You KnowUploaded byDiana Arun
- Run With TorchesUploaded byDiana Arun
- Extended AsciUploaded byDiana Arun
- The Triad Tree _ Dreamscaping With June Rollins®Uploaded byDiana Arun
- Travel grants CSIRUploaded byDiana Arun
- 每個女人都漂亮Uploaded byMike Lin
- Q_bank_OS.docUploaded byDiana Arun
- Computer Organization Question BankUploaded byDiana Arun
- English 11Uploaded byDiana Arun
- Here's How to Undo a Sent Email in GmailUploaded byDiana Arun
- ONE DAY AT A TIME.docxUploaded byDiana Arun
- The Battle Belongs to the Lord (Em)Uploaded byrodney18
- MID II CO-QB-final.docxUploaded byDiana Arun
- Blood Group DatabaseUploaded byDiana Arun
- mltr - paint my love.txtUploaded byDiana Arun
- What i PossessUploaded byDiana Arun
- Dengue - Awareness.pptUploaded byDiana Arun
- Extended AsciUploaded byDiana Arun
- After installing the BrowserLockdown3.docxUploaded byDiana Arun
- Brooklyn Limestone_ Forget Me Not (John Derian Inspired) Reminder TrayUploaded byDiana Arun
- mark antony-u sang to me.txtUploaded byDiana Arun
- Precious moments colouring page 3.pdfUploaded byDiana Arun
- Precious moments colouring page2.pdfUploaded byDiana Arun
- Introduction to Pattern Recognition.docxUploaded byDiana Arun
- HP ProLiant DL320 G4 server.docxUploaded byDiana Arun
- Precious moments colouring page 4.pdfUploaded byDiana Arun
- ONE DAY AT A TIME.docxUploaded byDiana Arun
- Dinosaur Finger Puppets 1Uploaded byDiana Arun

- ASN.1 SummaryUploaded byinfombm
- 100 Best Selenium Job Interview QuestionsUploaded byhemanthasn
- bspUploaded byprasad_5517718
- Moving Applications to the Cloud 2nd EditionUploaded bychichisara
- RonalSanchez (hire@ronalsanchez.com)Uploaded byronal_sanchez6015
- Resource Allocation using Virtual Machine Migration: A SurveyUploaded byidescitation
- pointers1.docxUploaded byArockia Raj
- c Palindrome Program, c Program for Palindrome _ Programming SimplifiedUploaded bySachin Puri
- yeyeyeUploaded byDinda Idris
- Mat Plot LibUploaded byricardus_1989
- JorsiRamos CVUploaded byJorsi Ramos
- LM_Chapter 06.1.pdfUploaded bymnahas84
- SQliteUploaded byKristine Ancheta Pascua
- Cisco SIP Message ManipulationUploaded byrohitkamahi
- CriticismUploaded bysnehachandan91
- ABendAid_manualUploaded byjitujitu852
- List of Programming Languages by CategoryUploaded bySid Babu
- ResumeUploaded bySunny Dhanani
- ABAP Code - To Fetch SAP BI Qery DataUploaded byhemchanK
- MIT -courseUploaded byCristian Gabor
- Software Quality- Definitions and Strategic IssuesUploaded byRoberto Nuñez
- Web Programming with RPG.pdfUploaded byGerman Jaimes
- Embedded C ProgrammingUploaded byshashankif
- rmongodbUploaded bysr
- resumeUploaded bychmallikarjun
- Using Javascript to Pass Multiple Values to a Textbox Prompt Within IBM Cognos 8 Report StudioUploaded bycrystal_rhoades
- Erd ConceptsUploaded byJoshua Brosas
- Ebs Diagnostics Troubleshooting 483730Uploaded byKhalil Shafeek
- Metodologia Software - II Plantillas volere y umlUploaded byJuanSebastianPira
- Grouping, loops and conditional execution.pptxUploaded byqwdfgh