COCI-08 (2008) - Γύρος #3 - 3 (Cross)

View as PDF

Submit solution

Points: 30 (partial)
Time limit: 1.0s
Memory limit: 32M

Author:
Problem type
Allowed languages
C, C++, Java, Pascal, Python
Cross

Στο παιχνίδι του Sudoku, ο στόχος είναι να τοποθετήσετε ακέραιους αριθμούς μεταξύ 1 και 9, κλειστό διάστημα [1,\;9], σε ένα πλέγμα 9 \times 9 έτσι ώστε κάθε γραμμή, κάθε στήλη και καθένα από τα εννέα πλαίσια 3 \times 3 να περιέχει και τους εννέα αριθμούς. Ο αρχικός πίνακας είναι εν μέρει συμπληρωμένος έτσι ώστε να είναι δυνατό να συμπεράνουμε λογικά τις τιμές των άλλων κελιών. Η δυσκολία των γρίφων Sudoku ποικίλλει και απαιτούνται πολύπλοκες μέθοδοι ανάλυσης για την επίλυση των πιο δύσκολων γρίφων. Σε αυτό το πρόβλημα, ωστόσο, θα εφαρμόσετε μια από τις πιο απλές μεθόδους, την διασταυρούμενη εκκόλαψη (cross-hatching).
Στη διασταυρούμενη εκκόλαψη, επιλέγουμε έναν από τους εννέα αριθμούς και, για κάθε εμφάνισή του στο πλέγμα, διαγράφουμε την αντίστοιχη γραμμή, στήλη και πλαίσιο 3 \times 3. Τώρα αναζητήστε οποιαδήποτε πλαίσια 3 \times 3 όπου υπάρχει μόνο μια πιθανή τοποθέτηση για τον αριθμό και τοποθετήστε τον εκεί.
Η πρώτη εικόνα παρακάτω δείχνει ένα πολύ αραιά συμπληρωμένο πλέγμα Sudoku. Ωστόσο, ακόμη και σε αυτό το πλέγμα είναι είναι δυνατό να συμπεράνουμε χρησιμοποιώντας διασταυρούμενη εκκόλαψη ότι ο αριθμός στο επάνω αριστερό κελί είναι 4, όπως φαίνεται στη δεύτερη εικόνα.

coci08c3-figure.svg

Θα σας δοθεί ένα μερικώς συμπληρωμένο πλέγμα. Η δουλειά σας είναι να εφαρμόζετε επανειλημμένα τη μέθοδο διασταυρούμενης εκκόλαψης για διαφορετικούς αριθμούς έως ότου δεν μπορούν να βγουν πλέον συμπεράσματα για κανέναν αριθμό.
Η αρχική τοποθέτηση των αριθμών στο πλέγμα ενδέχεται να μην είναι έγκυρη. Είναι επίσης πιθανό να μην υπάρξει διαθέσιμο κελί για έναν αριθμό σε ένα πλαίσιο 3 \times 3. Και στις δύο περιπτώσεις, πρέπει να αναφέρετε ένα σφάλμα.

Είσοδος

Η είσοδος θα αποτελείται από 9 γραμμές, καθεμία από τις οποίες περιέχει ακριβώς 9 χαρακτήρες. Κάθε χαρακτήρας θα είναι είτε ένα ψηφίο μεταξύ 1 και 9, ή μια τελεία ('.') που δηλώνει ένα κενό κελί.

Έξοδος

Εάν η είσοδος είναι έγκυρη και δεν υπάρχει αντίφαση κατά την επίλυση, θα πρέπει να εξάγετε το πλέγμα στην ίδια μορφή που δόθηκε, με κελιά συμπληρωμένα, εάν η τιμή τους μπορεί να συναχθεί χρησιμοποιώντας διασταυρούμενη εκκόλαψη. Σε διαφορετική περίπτωση, τυπώστε "ERROR" (τα εισαγωγικά είναι για σαφήνεια).

Παραδείγματα

input

..9......
.....4...
.......4.
.........
.4.......
......... 
.........
.........
.........

output

4.9......
.....4...
.......4.
.........
.4.......
.........
.........
.........
.........

input

...1...6.
18...9...
..7.642..
2.9..6.5.
.43...72.
.6.3..9.1
..265.1..
...2...97
.5...3...

output

524137869
186529473
397864215
219476358
843915726
765382941
972658134
638241597
451793682

input

1........
..1......
.......1.
.........
.........
.........
.........
.........
.........

output

ERROR

input

........2
....1....
1........
......1..
.........
.........
.........
.......1.
.........

output

ERROR

Comments

There are no comments at the moment.